實現(xiàn)C++“屬性”:模板實現(xiàn)

屬性的基本特征就是擁有g(shù)etter、setter。

C++中基本上把實現(xiàn)一個類的賦值運算符、類型轉(zhuǎn)換運算符就能實現(xiàn)屬性的特征,而在類型方面,使用模板便可以處理任意類型:

namespace extension
{

    template<typename T> struct property
    {
    protected:

    public:
        property() = default;
        property(const property<T>& _pt) : __t(_pt) {}
        property(property<T>&& _pt) noexcept : __t(_pt) {}
        property(const T& _t) : __t(_t) {}
        property(T&& _t)noexcept : __t(_t) {}
        T& operator=(const T& _t) 
        { 
            __t = _t;
            return __t;
        }
        T& operator=(T&& _t) noexcept { 
            __t = _t; 
            return __t;
        }
        T& operator=(const property<T>& _t)
        {
            __t = _t;
            return __t;
        }
        T& operator=(property<T>&& _t) noexcept {
            __t = _t;
            return __t;
        }
        operator T() const { return __t; }

    private:
        T __t;
    };
    
}
struct MyStruct
{
    property<int> num = 9;
};



int main()
{
    MyStruct ms;
    cout << ms.num << endl;
    ms.num = 10;
    cout << ms.num << endl;
    
    property<int> i = 90;
    ms.num = i;
    cout << ms.num << endl;
    property<int> y(i);
    cout << y << endl;

    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容