Инициализация по умолчанию для элемента шаблона

Предположим, у меня есть следующий шаблон

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(...)конструктор по умолчанию больше не является опцией.

2

Решение

Вы можете просто сделать

X() : t() { }

И / или это в C ++ 11

X() : t { } { } // see Johannes Schaub's comments about this

Это будет означать инициализацию (или это инициализация по умолчанию?) t к какому-либо значению по умолчанию для его типа, будь то 0 для встроенных, серия (значение? по умолчанию) инициализаций для массивов или использование конструктора по умолчанию для пользовательских типов.

11

Другие решения

Других решений пока нет …