如果乙個類要實現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 輸出從構...