假设我有:
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
?
答案 0 :(得分:1)
是的,每次f<T>
的实例化都会有编译器生成的f()
的定义。
根据编译器的不同,f()
可以通过内联进行优化,也可以在代码段中获取那么多空间。
但是,我很少遇到这种设计,你在非模板类中有一个非静态模板成员函数(没有任何参数!)。