Я хочу иметь квалифицированную инициализацию класса по умолчанию, даже если конструктор не имеет параметров.
Поэтому я пытаюсь установить значение по умолчанию с определением шаблона, попробовав что-то вроде этого ниже. Инициализировать параметр во время компиляции (если он не указан):
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;
==> Теперь все вышеизложенное мне ясно. Я только что нашел ответ здесь stackoverflow.com/questions/2183087/… (конструкция разрешена, но НЕ С DATATYPE float или double).
Но как мне просто инициализировать шаблоны с разными значениями ints и double?
typedef struct
{
cParameter<int, 42> someVariable;
cParameter<float, 23.0f> someOtherVariable;
} myStructure_t;
Что делать здесь? Любые подсказки?
typedef struct {
), - это путь наименьшего сопротивления. - person StoryTeller - Unslander Monica   schedule 21.02.2018template <typename Param_t, Param_t def =Param_t{}>
; в противном случае, если вы не дадите значение по умолчанию параметру шаблона, отличному от типа, как вы можете написатьcParameter<int> someVariable;
? - person max66   schedule 21.02.2018int someVariable = 0;
и так далее. Это было бы менее утомительно. - person StoryTeller - Unslander Monica   schedule 21.02.2018