我运行了以下代码
using namespace std;
#include <iostream>
template<typename a> struct function
{
void self1(){ cout << "hello world 1111" << endl; }
};
template<typename a> struct function<a&>
{
void self2() { cout << "hello world 2222" << endl; }
};
int main()
{
function<int> a;
a.self1();
function<int&> b;
b.self2();
return 0;
}
结果是:
hellow world 1111
heloow world 2222
想问一下第一个“struct function”和第二个“struct function”
之间的关系第二个是第二个被分类为“模板专业化”吗? (似乎没有)
我可以看到第二个是基于第一个。 (通过删除第一个,它是不可编译的)。但是
b.self1() is not defined.
所以第二个人已经将结构重新定义为一个新结构?
答案 0 :(得分:1)
我可以看到第二个是基于第一个。 (通过删除 第一个,它是不可编译的)。但
b.self1()未定义。所以第二个人重新定义了结构 换一个新的?
function
是一个结构模板,它本身不是一个结构。在实例化的过程中,您完成了function<int> a;
,编译器会为所有struct function_int
(或本例中为int
)生成T's
a's
。
template<typename a> struct function<a&>
这是结构模板的特化,用于a
是引用类型时。此专业化不能使用“原始”结构模板的任何成员/方法。