非模板类里面的模板函数的内存模型?

时间:2014-09-02 08:09:27

标签: c++ templates instantiation member-functions

假设我有:

template <typename T>
class A
{
    //Do something with T
};

我知道编译器会为代码中定义的每个不同的class A<T>生成T

如果我有:

class B
{
    template <typename T>
    void f() { /* Do something with T */ }
};

class B只有一个定义,但f()的多个重载是否会被调用的每个T

1 个答案:

答案 0 :(得分:1)

是的,每次f<T>的实例化都会有编译器生成的f()的定义。
根据编译器的不同,f()可以通过内联进行优化,也可以在代码段中获取那么多空间。

但是,我很少遇到这种设计,你在非模板类中有一个非静态模板成员函数(没有任何参数!)。