C++ 模板小技巧

C++的模板太有魔性了,根本就是一個編譯期語言。不過要作到好用,有用,又不產生垃圾代碼確實困難。
雖然還沒領悟到精髓,可是如下幾個用法我的感受仍是挺不錯的。c++

成員函數擴充

在Go中能夠很容易地給任意類型增長方法函數

type Integer int
    
    func (a Integer) Less(b Integer) bool {
        return a < b
    }

感受這個特性十分方便,因而用模板實現了一個相似的功能。this

class Binary: public std::vector<unsigned char>
    {
    public:
    template<typename T>
    bool convertTo(T& value)
    {
        return false;
    }
    };

    template<>
    inline bool Binary::convertTo(String& value)
    {
        for (auto c : *this)
            value.push_back(c);
        return true;
    }

上面的例子中,首先定義了原始數據類型Binary,要讀取其中的內容就須要寫一個從Binary到特定類型的轉換函數。
利用模板特化咱們能夠將成員函數的實現放在任意位置,且不用修改原來類的定義。code

編譯期報錯

只要在泛型模板裏面寫入錯誤的代碼。ERROR不須要定義。編譯

class Binary: public std::vector<unsigned char>
    {
    public:
    template<typename T>
    bool convertTo(T& value)
    {
        //throw error
        ERROR("undefined convert Type");
        return false;
    }
    };

這樣一來一旦有人嘗試轉換成未定義的類型,編譯的時候就會報錯。模板

相關文章
相關標籤/搜索