考虑以下代码:
template<typename T>
struct A
{
void f(){...}
friend T;
};
template<typename T>
struct B
{
void f(T){...}//code depends on T
void g(){...}//code doesn't depends on T
}
如您所见,&#34;代码&#34; struct A
中的T
并不依赖于T
。
对于用于实例化A
的每个B::g()
,编译器是否会在最终二进制文件中生成不同的代码?
B<T>
函数的相同问题,编译器是否可以在this
的所有实例使用相同的函数,例如g()
未在{T
中使用{{1}} 1}},所以不依赖于{{1}}?标准是否有针对此案例的任何规范?
答案 0 :(得分:7)
如果你想确定编译器生成什么,为什么不编写一个非模板结构来实现不依赖于T的代码,然后从非模板派生你的模板?您将获得非模板代码的一个副本,模板的每个实例都会继承该模板代码。
至少,这是我过去发现模板实例化使我的编译对象非常大时所做的事情。