模板是否需要重载构造函数?

时间:2017-09-18 15:28:38

标签: c++ templates

我刚看完一些模板视频,我想我错过了一些概念。为什么不调用构造函数,或者为什么在构造函数没有使用所需的数据类型重载时不创建对象?由于我在编写<int>,编译器知道我不会处理一个int吗?

template <class T>
class Generic {
    T var;
public:
    Generic(){cout << "ctor called " << endl;}
    //Generic (T v) {var = v;}
};


int main () {

    Generic<int> generic1();

}

我不能创建这样的对象,然后通过setter修改T var的值吗?为什么我需要一个重载的构造函数,例如Generic<int> generic1(9);

1 个答案:

答案 0 :(得分:8)

这是一个Most vexing parse问题。

当然你可以通过默认构造函数初始化对象,然后通过setter修改值,这里的问题是你没有定义变量。 Generic<int> generic1();是一个函数声明,名为generic1,不带参数并返回Generic<int>

你想要的是

Generic<int> generic1;

Generic<int> generic1{}; // since C++11