有没有办法使用显式实例化按类型设置成员变量

时间:2013-12-18 21:26:18

标签: c++ templates

我想要做的简化示例:

如果我有课:

template <typename T>
class Foo
{
public:
    Foo() : numericType(false){};

private:
    bool numericType;
}

如果T是数字类型,我希望它将awesomeType设置为true,否则为false。我可以使用显式实例化吗?我希望将numericType设置为true的每个类型都显式实例化并将其设置为true,而所有其他类型都未显式实例化,因此保持为false?

如果没有,你会怎么做?

备注:感谢我的intel编译器,我无法使用C ++ 11。

3 个答案:

答案 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)

这主要是在std::is_arithmetic中完成的。

我刚刚看到你不允许使用C ++ 11 ...... 尝试提升类型特征is_arithmetic

标准的“偷”这个来自提升。

相关问题