用于模板参数

时间:2016-09-14 15:02:44

标签: c++

我运行了以下代码

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.

所以第二个人已经将结构重新定义为一个新结构?

1 个答案:

答案 0 :(得分:1)

  

我可以看到第二个是基于第一个。 (通过删除   第一个,它是不可编译的)。但

     

b.self1()未定义。所以第二个人重新定义了结构   换一个新的?

function是一个结构模板,它本身不是一个结构。在实例化的过程中,您完成了function<int> a;,编译器会为所有struct function_int(或本例中为int)生成T's a's

template<typename a> struct function<a&> 

这是结构模板的特化,用于a是引用类型时。此专业化不能使用“原始”结构模板的任何成员/方法。