跨平台模板的写法

(若转载,请注明原出处与作者,作者:Witton)

        由于工作的原因,自己写的代码,需要跨平台运行(windows与Linux),但是由于VC编译器与gcc/g++编译器的差别,有的代码,在VC下面编译OK,在Linux下却未必编译得过,下面就是一个典型的例子:
请先看一下下面的一段代码是否有问题:

#include <iostream>
using namespace std;
template <typename T>
class CT
{
public:

 static void StaticInit()
 {
   pInstance = new T;
   assert(pInstance);
 }
 static void StaticDestroy()
 {
   delete pInstance;
 }
 static T* Instance()
 {
   assert(pInstance);
   return pInstance;
 };
protected:
 static T* pInstance;
 CT( void )
 {
 }
 virtual ~CT( void )
 { 
 }
};

class CTestClass : public CT<CTestClass>
{
private:
 CTestClass();
 
 friend class CT;
};

CTestClass * CT<CTestClass>::pInstance = NULL;

上面这段代码,在VC环境下编译是完全没有问题的;但是在Linux下编译就会有问题:

在friend class CT这一行会报错:
template argument required for `class CT'
friend declaration does not name a class or function
在最后一行代码处会报错:too few template-parameter-lists
为了让所写的代码既能在Windows下编译通过,也能在Linux下编译通过,就需要作如下修正:

将friend class CT改成friend class CT<CTestClass>
在最后一行的前一行加上template<>  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值