【问题标题】:Memory model of template function inside non-template class?非模板类中模板函数的内存模型?
【发布时间】:2014-09-02 08:09:27
【问题描述】:

假设我有:

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

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

如果我有怎么办:

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

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

【问题讨论】:

  • 是的。还能是什么?
  • Om 汇编级别没有类定义。每个类方法都被编译为带有隐藏“this”参数的全局函数。在每个编译单元中,模板化函数被编译为每个实例化类型的全局函数。

标签: c++ templates instantiation member-functions


【解决方案1】:

是的,f&lt;T&gt; 的每个实例化都会有一个由编译器生成的f() 的定义。
根据编译器的不同,f() 可以通过内联进行优化,或者它可以在代码段中获取那么多空间。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 2011-06-07
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    相关资源
    最近更新 更多