使用静态变量和虚函数在sort()函数中实现谓词,以进行多态类对象排序。这个解决方案有效吗?
以下示例:
// Here we've got virtual function that return a static variable
// and each derived class has a separate unique static
class Base {
protected:
virtual const int &GET_ID const { return BASE_ID; }
private:
static const int BASE_ID = 0;
}
class Derived : public Base {
private:
const int &GET_ID const { return DERIVED_ID; }
static const int DERIVED_ID = 1;
}
class Derived2 : public Base {
private:
const int &GET_ID const { return DERIVED2_ID; }
static const int DERIVED2_ID = 2;
}
// We can then construct a predicate for the sort function to
// sort a list of polymorphic object
bool compare (Base *base1, Base *base2) {
return base1->GET_ID() < base2->GET_ID();
}
std::sort(containerOfBasePtr.begin(), containerOfBasePtr.end(), compare);
我知道可以通过使用非静态保护成员来完成它,但它需要为每个对象分配更多的内存。
答案 0 :(得分:0)
“高效”是一个相对术语。但是如果你不希望有额外的内存使用,那么使用虚函数或type_index
是我能想到的唯一选择。
另一方面,如果我们对问题背景有更多了解,也许可以用完全不同的方式解决这个问题。一种可能的替代方法是将不同的对象存储在完全不同的容器中,由unordered_map
索引。