带有float参数的C ++模板

时间:2013-01-10 20:09:18

标签: c++ templates

  

可能重复:
  C++: Why can’t I use float value as a template parameter?

我有这堂课:

template<typename ValueType, ValueType DefaultValue>
class SomeClass
{
    public:
        SomeClass() : m_value(DefaultValue){}

        ValueType m_value;
};

我想这样用:

SomeClass<int, 1> intObj; //ok
SomeClass<float, 1.f> floatObj; //error: 'float' : illegal type for non-type template parameter 'DefaultValue'

您能否解释一下我使用float时出现此错误的原因?

我想使用类似的东西来表示RGBA颜色,并使用默认值初始化不同颜色表示的通道(例如白色)。

5 个答案:

答案 0 :(得分:3)

该语言不允许将浮点类型用作非类型模板参数。有关详细讨论,请参阅Why can't I use float value as a template parameter?

答案 1 :(得分:3)

§14.1/ 7(C ++ 11 N3485)明确禁止这样做:

  

非类型模板参数不应声明为具有浮点,类或void类型。 [例如:

template<double d> class X; // error  
template<double* pd> class Y; // OK  
template<double& rd> class Z; // OK

答案 2 :(得分:0)

不幸的是,C ++不支持浮点非类型模板参数。

答案 3 :(得分:0)

您收到该错误,因为非类型模板参数不能是float类型。它们可能只是积分枚举成员指针地址

答案 4 :(得分:0)

这很简单:非类型模板参数必须是整数类型或指针类型的编译时常量,即bool,枚举,指针,指向成员的指针,long,int,short,char。当前标准中不允许使用浮点参数。