由于我一直在 C++ 中使用模板,所以经常遇到这个问题:我想在向量中收集模板类的不同版本的实例。
我知道这不可能直接实现,但我想知道是否有一些解决方法可以实现这一点。
例如,如果我有这样的模板化类:
enum test_e
{
TYPE_A,
TYPE_B
};
template <test_e TYPE>
class test
{
void doSomething()
{
switch (TYPE)
{
...
}
}
};
我想建立一个向量,我可以在其中推动两个专业化(TYPE_A
& TYPE_B
) 班级的test
.
执行此操作的最佳方法是什么?
如果要存储不同的模板类,可以创建一个父类,并在模板类中继承该类。
我不知道你为什么使用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;
}
output:
Base Function
Int template
Float template
Process finished with exit code 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)