讓std map operator 變聰明

2021-05-23 05:07:45 字數 1040 閱讀 2948

std::map::operator是乙個設計得很磋卻很好用的介面,看下面的例子:

#include

#include

using namespace std;

int main()

mapiimap;

iimap[1] = 2; ---------------------------(1)

iimap[2]; --------------------------------(2)

cout << iimap[1] << iimap[2] << iimap[3] << endl;

return 0;

operator的語義是說:我先查一下這個key,如果沒有就先插入乙個pair(key, value()),然後把value的引用返回。

當(2)這樣用時,它也會插入一對值(2,0),實際上你可能不希望這麼做,可能你只是想看看key=2的值是多少或者存不存在?是的,它沒有意識到何時需要,一定需要插入新值。顯然,當作左值時需要,作右值時只要查一下就夠了。

以自己的乙個hash_table類為例,實現就省了,它有2個不磋的介面:

template

class hash_table

public:

value* get_value(const key& key);

value* set_value(const key& key, const value& value);

為了實現更好的operator,這個介面被設計成:

它再過載operator=和operator value,如下:

operator value()

else

}這樣基本功能就完成了,它能感知=運算子,同時不失一般的在一些地方被隱式轉化成value。

如此還不夠,像+= -= ++ --這些運算子也能代表著必須是左值,你如果乙個乙個過載,很麻煩,再寫乙個一般的包裝類:

protected:

virtual t& get_lvalue()

virtual t get_rvalue()

else}};

cedega讓我快樂!讓痛苦!

在linux上玩遊戲早不是夢想,很早以前,前輩們都用wine來實現。而複雜的配置讓很對初學者望而卻步。現在,菜鳥也可以輕鬆的在linux上跑起來。cs,極品飛車,魔獸,魔獸世界,一大堆的遊戲都可以在輕易的在linux下跑。它就是cedega,其實它早就有了,只是沒有wine那麼讓人普及,畢竟是要收費...

讓CSS更規範 讓設計居中

摘自 長文字行難以閱讀。隨著現代顯示器的尺寸越來越大,螢幕可讀性問題變得越來越重要。緩解這個問題的一種方法是讓設計居中。居中的設計只佔螢幕的一部分,而不是橫跨螢幕的整個寬度,這樣就會建立比較短的容易閱讀的行。居中的設計目前非常時髦,所以如何在css中設計居中是大多數開發人員首先要學習的主題之一。讓設...

重構,讓人快樂讓人苦

重構,是編寫 必須要面對的一項操作,同時也應該是程式設計師樂於實踐的一項內容。不論是邏輯實現還是設計過程,乃至整個分層結構,我們都可能面臨並且實施重構。這篇文章不會告訴您什麼是重構,如何去優美的重構等等的理論,只想和大家分享一些感受,並且 一些問題。最近的兩周,我一直對我們團隊的乙個子業務框架做重構...