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