Я хотел создать шаблон для числовых значений, и для данного типа я хотел бы предоставить значения по умолчанию для значений min и max.Создание шаблона с аргументами по умолчанию на основе типа
Я нашел решение, которое работает до сих пор ...
template<typename T> struct MinDefaultValue;
template<typename T> struct MaxDefaultValue;
template<typename T, usize_t MinDefault = MinDefaultValue<T>::value, usize_t MaxDefault = MaxDefaultValue<T>::value>
class NumericColumn
{
public:
public:
NumericColumn(T *pAddress, T nDefault, usize_t nMinValue = MinDefault, usize_t nMaxValue = MaxDefault)
{
mAddress = pAddress;
mDefault = nDefault;
mMinValue = nMinValue;
}
bool toValue(void)
{
return true;
}
private:
T *mAddress;
usize_t mMinValue;
usize_t mMaxValue;
T mDefault;
};
template <> struct MinDefaultValue<byte_t> { static const usize_t value = (usize_t)CHAR_MIN; };
template <> struct MaxDefaultValue<byte_t> { static const usize_t value = (usize_t)CHAR_MAX; };
Причина, почему мне не нравится это, потому что теперь Min-
и MaxDefaultValue
находится вне класса имен, в то время как она принадлежит внутри него.
Проблема заключается в том, что я не знаю, как определить специализации для различных типов, потому что сам родительский класс также является шаблоном.
Я изменил класс это:
template<typename T>
class NumericColumn
{
public:
template<typename T> struct MinDefaultValue;
template<typename T> struct MaxDefaultValue;
public:
NumericColumn(T *pAddress, T nDefault, usize_t nMinValue = MinDefaultValue<T>::value, usize_t nMaxValue = MaxDefaultValue<T>::value)
{
mAddress = pAddress;
mDefault = nDefault;
mMinValue = nMinValue;
}
bool toValue(void)
{
return true;
}
private:
T *mAddress;
usize_t mMinValue;
usize_t mMaxValue;
T mDefault;
};
Но когда я пытаюсь обеспечить spezialisations я получаю ошибку компиляции:
template <> struct NumericColumn<byte_t>::MinDefaultValue<byte_t> { static const usize_t value = (usize_t)CHAR_MIN; };
template <> struct NumericColumn<byte_t>::MaxDefaultValue<byte_t> { static const usize_t value = (usize_t)CHAR_MAX; };
'class' : invalid or missing type parameter list
Вы специализируетесь на 'MinDefaultValue' для 'NumericColumn '. Вам не нужен шаблон <> template <> '? –
LogicStuff
Что это значит? Разве я не должен предоставлять тип специализации? – Devolus
Теперь я не знаю, что вы имеете в виду.Я только догадался, что придумал [это] (http://coliru.stacked-crooked.com/a/5dbc7e3b56fcd44c), но у вас уже есть лучший ответ. – LogicStuff