Подтвердить что ты не робот

Как правильно инициализировать переменную-член типа шаблона?

предлагаю, что у меня есть функция шаблона, например:

template<class T>
void doSomething()
{
    T a; // a is correctly initialized if T is a class with a default constructor
    ...
};

Но переменная a оставляет неинициализированным, если T - примитивный тип. Я могу написать T a (0), но это не работает, если T - класс. Есть ли способ инициализировать переменную в обоих случаях (T == class, T == int, char, bool,...)?

4b9b3361

Ответ 1

Так же:

T a{};

Pre-С++ 11, это было простейшее приближение:

T a = T();

Но для этого требуется T быть скопируемым (хотя копия, безусловно, будет удалена).

Ответ 2

Поле шаблона класса в С++ 11 имеет тот же синтаксис:

template <class T>
class A {
  public:
    A() {}
    A(T v) : val(v) {}
  private:
    T val{};
};