Как правильно инициализировать переменную-член типа шаблона? - PullRequest
19 голосов
/ 27 января 2010

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

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 ]

33 голосов
/ 27 января 2010

Вроде так:

T a{};

До C ++ 11, это было самое простое приближение:

T a = T();

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

1 голос
/ 06 августа 2016

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

template <class T>
class A {
  public:
    A() {}
    A(T v) : val(v) {}
  private:
    T val{};
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...