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

And*_*ndy 2 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();

}
Run Code Online (Sandbox Code Playgroud)

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

son*_*yao 8

这是一个最令人烦恼的解析问题.

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

你想要的是什么

Generic<int> generic1;
Run Code Online (Sandbox Code Playgroud)

要么

Generic<int> generic1{}; // since C++11
Run Code Online (Sandbox Code Playgroud)