Boost學習筆記 operators

2021-04-12 14:43:58 字數 2011 閱讀 7951

如果乙個類要實現operator<,operator+,意味著可能也要實現operator>, operator+=,等其它操作符。只要提供了operator<,operator+=就可以根據這兩個操作符實現operator>,operator+=

等其它操作符。而且這種實現是單調的

operator

>(const t& x, const t& y) 

所以boost提供了這些實現,只要提供了最基本的操作符,那些重複的勞動就不用自己去做了

首先要看一下crtp模式

―――――――――――――――――――――――――――――――――――――――

the curiously recurring template pattern(crtp)。這個模式本身是指將派生類作為引數在它自己的模板化基類裡使用

―――――――――――――――――――――――――――――――――――――――

template

classb

};class

d: private b

d operator + (const d& other)

explicit d(int b):b_(b)

d():b_(0){};

void print()

private:

int b_; };

intmain()

上面通過提供運用crtp模式來實現了operator += 操作,你只要提供operator+操作,那麼就可以自動幫助你實現operator +=操作。基類中

template

friend

d operator+= (d & d, const u & other)

這是基類的友元函式,而不是成員函式,如果是成員函式,那麼派生類就不能私有繼承基類(那樣operator +=)就變的不可訪問。

通過crtp,可以將和派生類型別相關的相同操作都提取到乙個基類中

template

structb

void printtype()

}; class

d:public b ;

boost

的operators庫提供了完整的比較操作符,算術操作符,迭代器操作符

下面是個例子

――――――――――――――――――――――――――――――――――――――――――――――

class

thing :

boost::less_than_comparable,

boost::equivalent

explicit thing(const std::string& name):name_(name) {}

friend

bool

operator

<(const thing& lhs,const thing& rhs) };

它提供了以下這些操作符

bool

operator

<(const thing&,const thing&);

bool

operator>(const thing&,const thing&);

bool

operator

<=(const thing&,const thing&);

bool

operator>=(const thing&,const thing&);

bool

operator==(const thing&,const thing&);

――――――――――――――――――――――――――――――――――――――

此外boost的operators庫還提供了很多其它的基類

less_than_comparable,equality_comparable,addable,subtractable等等,在使用它們的時候都要求遵循一定的語義,比如說使用ess_than_comparable的時候要求必須提供

bool operator<(const t&, const t&);
語義

boost 學習筆記

先來看看如何賦值把 include include include include include include include using namespace std int tmain int argc,tchar ar include include include include incl...

Boost學習筆記 filesystem

檔案操作是程式設計中非常重要的乙個部分,filesystem庫是乙個可移植的檔案系統操作庫,它使用posix標準檔案系統的路徑,介面很類似標準庫的容器和迭代器,使c 具有了類似指令碼餘姚的功能,可以跨平台操作目錄 檔案,寫出通用的指令碼程式。filesystem庫的核心類是path,它遮蔽了不同檔案...

Boost庫學習筆記

timer類 由於精度原因,不適合於精度很高或時間跨度很大的地方。也不能很好的跨平台。呼叫elapsed min 和elapsed max 分別獲取其精度,而且其精度根據平台會有變化。progress timer類繼承與timer類,但是其有乙個析構函式,析構的時候會自動呼叫elapsed 輸出從構...