假设我有这样的数据结构:
std::set<A, F1> sa; //A is a custom structure and F1 is its comparison function.
由于sa
暴露给许多其他用户,因此我无法更改变量名称。现在,我需要添加另一个比较功能,例如F2
,但是我仍然用sa
指向它。是否可以在不更改名称的情况下切换比较功能?我有一个解决方案,但是有一个问题,让我们先看一下代码:
class SortedQ
{
public:
virtual void insert(const Idle_Agent& ia) = 0;
virtual bool erase(const std::string& name) = 0;
};
template <typename F>
class CustomSortedQ : public SortedQ
{
public:
void insert(const Idle_Agent& ia)
{
...
}
bool erase(const std::string& name)
{
...
}
private:
std::set<Idle_Agent, F> aq;
};
std::shared_ptr<SortedQ> ssq;
if(...)
{
ssq.reset(new CustomSortedQ<F1>())
}
else
{
...
}
问题是我需要使用指向基类的共享指针来遍历aq
。但在在基类中,我不知道确切的数据结构是什么样子,所以我无法准确地定义虚函数。
我该怎么办?
如果要在插入某些元素后更改顺序,则程序将具有未定义的行为。如果幸运的话,尝试查找或插入元素会崩溃。如果运气不太好,它将无法找到存在的元素。如果你不走运,恶魔会从你的鼻子里飞出来。
元素的顺序是集合的类型的一部分。