C/C++:繼承基類模版之後的友元聲明

       這段代碼中如果不將繼承的基類模版聲明爲友元類就會出現編譯錯誤,因爲基類函數調用了子類的保護(也可以是私有)構造函數

template <typename T>
class Base
{
public:
    static T* instance()
    {
        return new T();
    }

    Base() = default;
    virtual ~Base() = default;
};

class Derived : public Base<Derived>
{
    friend class Base<Derived>;

protected:
    Derived() = default;
};

int main()
{
    Derived* derive = Derived::instance();
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章