C++ Template在g++ 4.1和vc8/9之间的一些区别----强悍的VC

       好久没有在Linux下编译我的代码了。其实最头疼的就是模板的移植性问题。记得上次把我的资源管理器移植到公司的Linux项目上的时候就花了我很多时间来协调VC和GCC在模板支持上的一些区别。因为我不是一个语言爱好者。并没有深入的研究过C++模板的规范化代码,所以下面的这个跟头仅用于教训我自己: 

一:
     template <typename T> class TBase
    {
              typedef  vector<T> TVector;
    protected:
              TVector                    m_array;
   } ;

   这个代码问题不大。注意派生这个类的时候
    template <typename T>class TSubClass : public TBase<T>
    {
             typedef    TBase<T>  BaseClass;
              public :
             void func()
             {
                      //要声明一个TVector,
                      typename BaseClass::TVector vArray;// VC GCC都支持,注意最前面
                       TVector vArray;                                        // VC支持。GCC不支持
                     //要使用   m_array      
                        typename BaseClass::m_array.push_back(...) ;// VC GCC都支持,注意最前面的那个typename
                       m_array.push_back(...);                                           // VC支持。GCC不支持      
                        this->m_array.push_back(...) ;;// VC GCC都支持
            }
    };

二:
     模版特化问题:
 template <typename T>  void func(T& arg);
    template <const wchar_t> void func(const wchar_t& arg); // VC gcc都支持
   template <> void func(const wchar_t& arg);// vc支持。Gcc不支持

PS: 楼下的朋友说的很对。GCC支持的是标准。VC是扩展。让人用的方便一些。这个强悍是不加引号的。
因为我的类模板参数比较多。GCC报错的时候错误信息也很长。看了半天没看出来是派生类里的东西出错。浪费我一个多小时的睡眠,立此碑文,以示纪念。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值