实现使用模板化类而不使原始类成为模板的类

Implementing a class that uses a templated class without making original class a template

本文关键字:原始 实现      更新时间:2023-10-16

如果标题令人困惑,请抱歉。希望示例代码会使其更加清晰。

假设我有一个类:

template <typename T>
Class_A {
//has some methods
}

现在我也有一堂课:

Class_B {
vector<Class_A *> array;
void add( Class_A * arg) {
array.push_back(arg);
}
}

所以现在Class_B行不通,因为我没有使用像 T 参数那样的参数来表示我的class_A参数。我的问题是有没有办法在不使Class_B模板的情况下做到这一点。理想情况下,向量能够容纳Class_A<int>Class_A<string>之类的东西,所以我真的不想Class_B模板化。

任何想法将不胜感激!

class A_Base派生,使用 destructor 和相关方法作为virtual。使用此A_Base,只要您不需要模板。例如

template<typename T>
class Class_A : public A_Base {
~Class_A() override; 
// Other virtual methods
};

在不Class_B模板的情况下执行此操作的唯一方法是使类型是多态的;也就是说,让模板类Class_A继承另一个类(例如,Class_A_base(并存储指向Class_A_base的指针。

如果您更多地解释一下您尝试使用此模式实现的目标,则可能会有更好的解决方案。