我有一个模板类。由于在编译期间处理模板,是否可以在编译期间比较模板参数并使用预处理器添加特定代码?像这样:
template<class T>
class MyClass
{
public:
void do()
{
#if T is equal to vector<int>
// add vector<int> specific code
#if T is equal to list<double>
// add list<double> specific code
#else
cout << "Unsupported data type" << endl;
#endif
}
};
如何在编译期间将模板类型与另一种类型进行比较,如上例所示?我不想添加处理特定类型的特定子类。
答案 0 :(得分:9)
首先要做的事情 - do
是一个关键字,你不能拥有该名称的功能
其次,预处理器在编译阶段之前运行,因此使用模板中的东西是不可能的。
最后,你可以只专门化一个类模板的一部分,可以这么说。这将有效:
#include <iostream>
#include <vector>
#include <list>
template<class T>
class MyClass
{
public:
void run()
{
std::cout << "Unsupported data type" << std::endl;
}
};
template<>
void MyClass<std::vector<int>>::run()
{
// vector specific stuff
}
template<>
void MyClass<std::list<double>>::run()
{
// list specific stuff
}