查看模板实例化(c++) 10
一个模板函数,有什么方法可以看到这个模板函数都在哪里实例化了,以及都用了什么模板参数进行实例化...
一个模板函数,有什么方法可以看到这个模板函数都在哪里实例化了,以及都用了什么模板参数进行实例化
展开
2个回答
展开全部
其实无非两种,一种是具体化(又叫偏特化)一种是实例化(又叫全特话),对于具体化,就是
对模板的范围进一步压缩,并给这个更小的范围从新定义类成员(包括数据成员和方法)。对于实例化就是直接生成模板中某种实例(注意:同时给一个模板生成同一个实例化和具体化将报错)。举例:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
template <typename T1,typename T2>//#1
class A
{
int a;
public:
A (){cout<<"this is A<T1,T2> default constructor function!\n";}
};
template <typename T1>
class A<T1,int>//部分的具体化 #2
{
int b;
public:
A (){cout<<"this is A<T1,int> default constructor function!\n";}
};
template class A<int,char>;//显示的实例化,将直接生成该类型类定义
int main()
{
class A<int ,int> a;//隐式实例化 ,将隐式生成#2 的实例
class A<int ,char> b; //隐式实例化,将隐式生成#1的实例
return 0;
}
对模板的范围进一步压缩,并给这个更小的范围从新定义类成员(包括数据成员和方法)。对于实例化就是直接生成模板中某种实例(注意:同时给一个模板生成同一个实例化和具体化将报错)。举例:
#include<iostream>
#include<cstdio>
#include<stdlib.h>
using namespace std;
template <typename T1,typename T2>//#1
class A
{
int a;
public:
A (){cout<<"this is A<T1,T2> default constructor function!\n";}
};
template <typename T1>
class A<T1,int>//部分的具体化 #2
{
int b;
public:
A (){cout<<"this is A<T1,int> default constructor function!\n";}
};
template class A<int,char>;//显示的实例化,将直接生成该类型类定义
int main()
{
class A<int ,int> a;//隐式实例化 ,将隐式生成#2 的实例
class A<int ,char> b; //隐式实例化,将隐式生成#1的实例
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-09-13
展开全部
gcc的话可以用编译选项 -repo 生成一个rpo文件
更多追问追答
追问
没有这个选项吧,查不到啊,而且加上之后编译出错
追答
确定你用的是 gcc
gcc 用了 -repo 之后,连接器必然报错,也就是说不可能生成可执行程序。毕竟你的目的是看到模板的所有实例化,而不是生成可执行程序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询