非模板类中模板函数的内存模型

Memory model of template function inside non-template class?

本文关键字:内存 模型 函数      更新时间:2023-10-16

假设我有:

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

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

如果我有:

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

是否只有一个class B的定义,但对于每个不同的T,都有多个f()的重载?

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

然而,我很少遇到这样的设计,即在非模板类中有一个非静态模板成员函数(没有任何参数!)。