C++ 模板函数的调用可见性

程序中常常因为多态性的缘故要使用虚函数,为了传递这种多态性,往往会以函数参数的形式来装载这些多类型参数给特定底层函数处理。

这个时候,往往要在虚函数中实现一个底层类的模板特化。由于模板特化的定义可见性,这个底层A类的模板有两种处理方法:

 1)类域内一般采用inline 模板函数,函数申明和定义可以分离到.h和.cpp里。

 2)最常见的情况是采取,申明,定义一起放在.h中,从而保证模板可被其他类,函数调用的特性。

如:

//h

class A{

//1)templete <class T>  inline int funcA(T parm1, int p2);

2)templete <class T>  inline int funcA1(T parm1, int p2){//do something....}

};

//cpp

//1)templete<class T>inline int A:: funcA(T parm1, int p2){}

///////////////////////////////////////////Use funcA or funcA1///////////////////////

class B{

///funcB is a virtul function for override by B

int funcB(int a);

};

int B::funcB(int a)

{

  A pA;

     int pp1 = 2, a = 0;

     double pp2 = 2.34;

     pA.funcA1(pp1, a);//is ok

     pA.funcA(pp1,a);//link erro

}

原文地址:https://www.cnblogs.com/erickingxu/p/4249523.html