非模板相关代码的C ++代码生成

时间:2014-04-03 12:14:58

标签: c++ templates

考虑以下代码:

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}}?标准是否有针对此案例的任何规范?

1 个答案:

答案 0 :(得分:7)

如果你想确定编译器生成什么,为什么不编写一个非模板结构来实现不依赖于T的代码,然后从非模板派生你的模板?您将获得非模板代码的一个副本,模板的每个实例都会继承该模板代码。

至少,这是我过去发现模板实例化使我的编译对象非常大时所做的事情。