C++ Template在g++ 4.1和vc8/9之間的一些區別—-強悍的VC

來源:互聯網
上載者:User

       好久沒有在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報錯的時候錯誤資訊也很長。看了半天沒看出來是衍生類別裡的東西出錯。浪費我一個多小時的睡眠,立此碑文,以示紀念。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.