类模版成员特化示例

来源:互联网 发布:mac最小化窗口快捷键 编辑:程序博客网 时间:2024/05/05 14:45

// 类模版的某个成员函数不适用于某种类型时,可以对该成员函数针对类型进行特化.
// 示例:
using namespace std;

class CExcepter {};

template <typename T>
class CTempl
{
public:
 CTempl() {}
 ~CTempl() {}

public:
 void FunName()
 {
  std::cout << "FunName()" << endl;
 }
};

// 假设类模板的成员函数FunName不适用于CExcept
// 现针对CExcept这种类型,对成员函数FunName进行特化
// 在类模版外面定义声明(是否必须这样做)
template<>
void CTempl<CExcepter>::FunName()
{
 std::cout << "CTempl<CExcept>::FunName()" << endl;
}

// 测试
int AppMain()
{
 CTempl<int> Obj1;
 Obj1.FunName(); // 输出:FunName()

 CTempl<CExcepter> Obj2;
 Obj2.FunName(); // 输出:CTempl<CExcept>::FunName()

 return 1;
}