模板类初始化与模板函数初始化

时间:2020-10-18 21:28:28

标签: c++

我正在努力弄清类和函数之间模板专业化的区别。

关于模板类,这是一段编译的代码(c ++ 17,gcc10.2):

template<typename T>
class Student {
public:
    T num;
};


auto main() -> int {
    Student<int> *t;
    t->num =5;

关于模板功能,这是一段编译代码(c ++ 17,gcc 10.2):


template<typename T>
T fib(T num) {
    if (num == 1) return 1;
    else if (num == 0) return 0;
    else return fib(num-1) + fib(num-2);
}

auto main() -> int {
    std::cout << fib(5);
    return 0;
}

我的问题是: 为什么我应该传入模板类型参数来实例化 main 中的模板类,而不必对模板函数做同样的事情? (目前,请忽略我已经使用了指向模板类的指针。即使实例化了该类,问题仍然有效。)

为了重新说明这个问题,我试图理解为什么在类的 main <int>是必需的,以便对其进行编译,而编译器会自动将模板类型推断为<int>(对于模板函数)。

我知道模板函数在编译时提供了隐式实例化(来自引用)。但是,这阻止了编译器对示例代码片段中的类进行隐式实例化。我相信所有必要的信息都可以在编译时获得(如果我错了,请纠正我)。

我一直在指的来源:

https://en.cppreference.com/w/cpp/language/class_template

https://docs.microsoft.com/en-us/cpp/cpp/explicit-instantiation?view=vs-2019

0 个答案:

没有答案