如何在不模板化类的情况下模板成员变量?

时间:2016-02-15 14:23:24

标签: c++

我有一个名为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
};

1 个答案:

答案 0 :(得分:2)

模板参数需要在编译时解决,因此没有办法让#34;未解决的&#34;非模板类中的模板成员。

看起来你需要的是继承而不是模板。制作课程Comparator和不同的子课程,例如ComparatorAComparatorB。 然后在您的苹果中存储两个类型为Comparator*的对象,每个向量一个(或每个向量中一个)。无论是分配基类还是子类的对象都不重要,您可以同时使用 - 并且使用虚函数可以在运行时解析正确的函数。