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