我希望有一个合格的类默认初始化,即使构造函数没有参数。
因此,我试图通过尝试类似下面的内容来设置模板定义的默认值。在编译时初始化参数(如果没有给出):
template < class Param_t, Param_t def >
class cParameter
{
public:
cParameter( Param_t p = def)
: m_Value(p)
{}
Param_t m_Value;
};
这不起作用:-( 附录:......双打或花车。它适用于整数。
原因是我希望用尽可能少的更改替换遗留代码中的结构元素。
typedef struct
{
int someVariable;
float someOtherVariable;
} myStructure_t;
到此
typedef struct
{
cParameter<int> someVariable;
cParameter<float> someOtherVariable;
} myStructure_t;
在普通类
中初始化此结构时class myClass
{
public:
myClass()
: m_Struct()
{}
myStructure_t m_Struct;
}
当模板没有默认初始化时,我收到错误(MSVC2013):
template < class Param_t >
class cParameter
{
public:
cParameter( Param_t p )
: m_Value(p)
{}
Param_t m_Value;
};
错误42错误C2512:'myClass :: m_Struct':没有合适的默认值 构造函数可用demo.cpp
我还看到了以下内容:
cParameter< int, 1> m_Works;
cParameter< double, 1.0> m_DontWork;
==&GT;以上对我来说很清楚。我刚刚在这里找到了答案stackoverflow.com/questions/2183087 / ...(允许构造,但不是WITH DATATYPE float或double)。
但是,我如何简单地使用不同的int和double值来初始化模板?
typedef struct
{
cParameter<int, 42> someVariable;
cParameter<float, 23.0f> someOtherVariable;
} myStructure_t;
这里做什么?任何提示?
答案 0 :(得分:0)
如果您可以为每种类型设置固定的默认值,则可以创建一个类型以将其定义为常量,并根据需要对其进行特殊处理。
template <typename T> struct MyTypeDefault { static const T value; };
template <typename T> const T MyTypeDefault<T>::value = T();
template <> struct MyTypeDefault<double> { static const double value; };
const double MyTypeDefault<double>::value = 1.0;
template <typename T>
class MyType {
public:
MyType() { value = MyTypeDefault<T>::value; }
private:
T value;
};