好久沒有在Linux下編譯My Code了。其實最頭疼的就是模板的移植性問題。記得上次把我的資源管理員移植到公司的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報錯的時候錯誤資訊也很長。看了半天沒看出來是衍生類別裡的東西出錯。浪費我一個多小時的睡眠,立此碑文,以示紀念。