Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;带浮点参数的模板_C++_Templates - Fatal编程技术网

C++ C++;带浮点参数的模板

C++ C++;带浮点参数的模板,c++,templates,C++,Templates,可能重复: 我有这门课: template<typename ValueType, ValueType DefaultValue> class SomeClass { public: SomeClass() : m_value(DefaultValue){} ValueType m_value; }; 模板 上课 { 公众: SomeClass():m_值(DefaultValue){} 值类型m_值; }; 我想这样使用它: Some

可能重复:

我有这门课:

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

        ValueType m_value;
};
模板
上课
{
公众:
SomeClass():m_值(DefaultValue){}
值类型m_值;
};
我想这样使用它:

SomeClass<int, 1> intObj; //ok
SomeClass<float, 1.f> floatObj; //error: 'float' : illegal type for non-type template parameter 'DefaultValue'
SomeClass-intObj//好啊
SomeClass-floatObj//错误:“float”:非类型模板参数“DefaultValue”的类型非法
你能解释一下为什么我在使用
float
时会出现这个错误吗


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

C++不支持浮点非类型模板参数,很遗憾。

由于非类型模板参数的类型不能是
float
。它们只能是整数、枚举、成员指针或地址。

该语言不允许将浮点类型用作非类型模板参数。有关详细讨论,请参见§14.1/7(C++11 N3485)明确禁止:

非类型模板参数不得声明为具有浮点、类别或空隙类型。[示例:

模板类X;//错误
模板类Y;//确定
模板类Z;//确定

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

简单的回答是标准不允许使用它。@K-ballo是的,这是sa我的问题。请关闭:)@Felics:我已经投票关闭它,等待4票…@K-ballo我已经投票:)+3这一副本非常方便,可以解释为什么,以及解决方法。它们也可以是枚举。在你发表评论时添加了这一点;)
template<double d> class X; // error  
template<double* pd> class Y; // OK  
template<double& rd> class Z; // OK