C++模板实例化
深入理解C++中第七章提到模板实例化参数的选择:函数的决议结果只和函数参数有关和返回值无关。记录一下。
测试程序如下:
#include <iostream> using namespace std; int foo(int d) { cout << "int foo" << endl; return d+1; } double foo(double d) { cout << "double foo" << endl; return d+1; } #include <iostream> using namespace std; extern int foo(int); extern double foo(double); template <class type> class A { private: int _val; type _member; public: void invariant() { _member = foo(_val); }//形参为int,返回型为double,但调用foo(int) type type_dependent() { return foo(_member);//形参为double,调用foo(double) } }; int main(int argc, char *argv[]) { A< double > a; a.invariant(); a.type_dependent(); return 0; }
测试结果如下:
int foo
double foo
当模板有实例化具体类型时,才产生具体的对象类图:
Class A<double> size=12 align=4 base size=12 base align=4 A<double> (0x0xb686e850) 0