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报错的时候错误信息也很长。看了半天没看出来是派生类里的东西出错。浪费我一个多小时的睡眠,立此碑文,以示纪念。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值