<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    C++模板類中使用靜態成員變量(例如Singleton模式)

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接 一個最簡單Singleton的例子:

    ///////// Test.h /////////
    template <class _T>
    class CTest
    {
    private:
    _T n;
    static CTest<_T>* m_pInstance;   // Notice: static member variable in template class
    private:
    CTest() { n = 0; }
    ~CTest() { }
    public:
    static CTest<_T>* Instance()
    {
    if (!m_pInstance)
    {
    m_pInstance = new CTest<_T>();
    }
    return m_pInstance;
    }
    void Set(const _T& value)    { n = value;   }
    };

    ///////// Test.cpp /////////
    #include "Test.h"
    CTest<int>* CTest<int>::m_pInstance = NULL;

    編譯時提示: too few template-parameter-lists,真是莫名其妙的錯誤提示。

    在網上找了半天,終于有點眉目了。似乎是應模板使用是編譯器做的是Lazy Evaluation,就是說只有當某個模板類(或者模板類中的某個函數)需要實例化時才實例化。也就是說上面這個例子中,編譯器在編譯到Test.cpp里面的那一句定義語句的時候,發現m_pInstance沒有辦法在整個類實例化之前分配空間。

    解決方法也很簡單,在定義靜態成員變量的那個前面加上“template <>”即可。如下:

    ///////// Test.cpp /////////
    #include "Test.h"
    template <>
    CTest<int>* CTest<int>::m_pInstance = NULL;RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全