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

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

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, ...)?

2 ответа

Решение

Вот так:

T a{};

До C++11 это было простейшее приближение:

T a = T();

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

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

template <class T>
class A {
  public:
    A() {}
    A(T v) : val(v) {}
  private:
    T val{};
};
Другие вопросы по тегам