我想要做的简化示例:
如果我有课:
template <typename T>
class Foo
{
public:
Foo() : numericType(false){};
private:
bool numericType;
}
如果T是数字类型,我希望它将awesomeType设置为true,否则为false。我可以使用显式实例化吗?我希望将numericType设置为true的每个类型都显式实例化并将其设置为true,而所有其他类型都未显式实例化,因此保持为false?
如果没有,你会怎么做?
备注:感谢我的intel编译器,我无法使用C ++ 11。
答案 0 :(得分:4)
您可以使用现有的类型特征来识别算术类型:从<type_traits>
开始,布尔值std::is_arithmetic<T>::value
表示T
是否为算术类型。
由于这是类型的属性,而不是此类型的任何特定对象的属性,因此不应将此布尔值设为非静态数据成员。充其量,它应该是一个静态的,恒定的数据成员,但你也可以在需要时直接使用这个特性。
答案 1 :(得分:2)
由于你不能使用C ++ 11,那么你可以按照其他人的建议,但使用Boost而不是STL:
http://www.boost.org/doc/libs/1_55_0/libs/type_traits/doc/html/index.html
虽然这里没有任何魔法。只是模板专业化。即使它很麻烦,你也可以自己实现它。
答案 2 :(得分:1)