模板成员函数仅在调用时实例化
template member function is instantiated only if called
为什么这段代码有错误:
template <typename T>
class CLs{
public:
void print(T* p){ p->print(); }
};
void main() {
CLs<int> c1; // compilation OK
CLs<double> c2; // compilation OK
double d=3;
c2.print(&d);
}
我的讲师说 c2.print(&d);
行有一个错误:
Compilation Error: Member function is instantiated only if called.
他是什么意思?
class 模板的成员函数仅在使用时才真正生成。这是模板的一个重要部分,它可以防止不必要的代码膨胀,并允许支持不满足模板的整个隐式合同但足以使用的类型。
您对 CLs<T>
变量的声明编译干净,因为 print
函数在使用之前不会编译。 c2.print(&d)
编译失败,因为它导致 CLs<double>::print
的实例化是错误的。
为什么这段代码有错误:
template <typename T>
class CLs{
public:
void print(T* p){ p->print(); }
};
void main() {
CLs<int> c1; // compilation OK
CLs<double> c2; // compilation OK
double d=3;
c2.print(&d);
}
我的讲师说 c2.print(&d);
行有一个错误:
Compilation Error: Member function is instantiated only if called.
他是什么意思?
class 模板的成员函数仅在使用时才真正生成。这是模板的一个重要部分,它可以防止不必要的代码膨胀,并允许支持不满足模板的整个隐式合同但足以使用的类型。
您对 CLs<T>
变量的声明编译干净,因为 print
函数在使用之前不会编译。 c2.print(&d)
编译失败,因为它导致 CLs<double>::print
的实例化是错误的。