3

可能重复:
C++:为什么我不能使用浮点值作为模板参数?

我有这堂课:

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 颜色,并使用不同颜色表示的默认值初始化通道(例如白色)。

4

5 回答 5

3

该语言不允许使用浮点类型作为非类型模板参数。有关广泛的讨论,请参阅为什么我不能使用浮点值作为模板参数?

于 2013-01-10T20:11:45.283 回答
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
于 2013-01-10T20:12:07.293 回答
0

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

于 2013-01-10T20:11:37.693 回答
0

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

于 2013-01-10T20:11:39.977 回答
0

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

于 2013-01-10T20:12:54.157 回答