Предположим, у меня есть следующий шаблон
template <typename T>
class{
T t;
};
Теперь я хочу добавить конструктор, который инициализирует t со значением по умолчанию для его типа. То есть для числовых типов t следует инициализировать с 0
, для указателей, t должен быть инициализирован с nullptr
, Наконец, могут быть другие типы, такие как структуры. Здесь хорошей инициализацией будет конструктор по умолчанию (который вызывается в любом случае, поэтому мне здесь не нужно ничего делать).
В заключение я ищу что-то вроде этого:
template<typename T>
class X{
T t;
X() : t(default_value<T>::value);
}
Как указывает мой воображаемый синтаксис, я думаю, что это могло бы быть возможно с каким-то шаблоном с различными специализациями, которые несут значения по умолчанию. Но как обрабатывать структуры и классы? Поскольку я указал t(...)
конструктор по умолчанию больше не является опцией.
Вы можете просто сделать
X() : t() { }
И / или это в C ++ 11
X() : t { } { } // see Johannes Schaub's comments about this
Это будет означать инициализацию (или это инициализация по умолчанию?) t
к какому-либо значению по умолчанию для его типа, будь то 0 для встроенных, серия (значение? по умолчанию) инициализаций для массивов или использование конструктора по умолчанию для пользовательских типов.
Других решений пока нет …