模板化类的不同专门化的向量 因为我在C++中使用模板,我经常遇到这个问题:我想在向量中收集模板的不同版本的实例。

模板化类的不同专门化的向量 因为我在C++中使用模板,我经常遇到这个问题:我想在向量中收集模板的不同版本的实例。,c++,C++,我明白这是不可能的,但我想知道是否有一些解决办法来实现这一点 例如,如果我有这样的模板类: enum test_e { TYPE_A, TYPE_B }; template <test_e TYPE> class test { void doSomething() { switch (TYPE) { ... } } }; enum测试 { A型, B型 }; 模板 课堂测试 { 无效剂量测定法() { 开关(类型) { ..

我明白这是不可能的,但我想知道是否有一些解决办法来实现这一点

例如,如果我有这样的模板类:

enum test_e
{
  TYPE_A,
  TYPE_B
};

template <test_e TYPE>
class test
{
  void doSomething()
  {
    switch (TYPE)
    {
      ...
    }
  }
};
enum测试
{
A型,
B型
};
模板
课堂测试
{
无效剂量测定法()
{
开关(类型)
{
...
}
}
};
我想构建一个向量,在这里我可以推动类
测试
的两个专门化(
TYPE\u a
&
TYPE\u B


执行此操作的最佳方法是什么?

如果要存储不同的模板类,可以创建父类并在模板类中继承该类

我不知道为什么要对类型使用
switch
,只需使用模板实例化

#include <iostream>
#include <vector>

using std::cout;
using std::endl;


class Mother {
public:
    virtual void doSomeThing() = 0;
};

template<typename T>
class Child : public Mother {
    void doSomeThing() override;
};

template<typename T> void Child<T>::doSomeThing() {
    cout << "Base Function" << endl;
}
template<> void Child<int>::doSomeThing() {
    cout << "Int template" << endl;
}

template<> void Child<float>::doSomeThing() {
    cout << "Float template" << endl;
}

int main() {

    std::vector<std::unique_ptr<Mother>> vec;

    vec.emplace_back(new Child<double>());
    vec.emplace_back(new Child<int>());
    vec.emplace_back(new Child<float>());

    vec[0]->doSomeThing();
    vec[1]->doSomeThing();
    vec[2]->doSomeThing();


    return 0;
}

旁白:如果只在
开关中使用
类型
,为什么它是一个模板参数?与
a类
B类
相同。继承,
std::variant
std::any
,(
std::function
?)都是可能的替代方案。@Caleth因为我正在做一个我想要最高速度的项目:),但这并没有实现
switch
ing一个模板参数并不能神奇地撤消类型擦除的开销,而类型擦除需要一个异构向量。我想你会发现
类型
,因为数据成员是fasterAvoid原始指针
std::vector
可以避免内存泄漏。
Base Function
Int template
Float template

Process finished with exit code 0