Как правильно инициализировать переменную-член типа шаблона?
Предположить, что у меня есть функция шаблона, как показано ниже:
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{};
};