我有一个名为Food的untemplated类。 Inside Food,有一个Apple指针矢量。 Apple也是Food里面的一个类。 Apple类有两个向量指向另一个类和一个比较器。直到运行时我才知道它们将是什么类型的比较器。
我需要模拟比较器。两者可能有不同的比较器,这就是我无法模板化苹果的原因。如果我模板苹果那么Food的Apple指针矢量会被打乱,因为可能有2个比较器。
我想我可以使用2个独立的比较器来模拟苹果,但我觉得有更优雅的方式。如果我想在某个时刻改变比较器中间程序,那也就是为什么它也不会起作用。
是否可以在没有模板苹果的情况下模拟比较器?还是有其他解决方案
class Food {
class Apple {
vector<Pointer, Comparator> container_one;
vector<Pointer, Comparator> container_two;
}
vector<Apple *> appleContainer
};
答案 0 :(得分:2)
模板参数需要在编译时解决,因此没有办法让#34;未解决的&#34;非模板类中的模板成员。
看起来你需要的是继承而不是模板。制作课程Comparator
和不同的子课程,例如ComparatorA
,ComparatorB
。
然后在您的苹果中存储两个类型为Comparator*
的对象,每个向量一个(或每个向量中一个)。无论是分配基类还是子类的对象都不重要,您可以同时使用 - 并且使用虚函数可以在运行时解析正确的函数。