模板化类的不同专门化的向量 因为我在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