我有代碼,我可以查詢std::set
類型爲A
的所有符合條件的結構。我經常希望我的查詢條件是這樣,代碼返回一個只包含一個對象的集合。在這些情況下,如果查詢沒有產生一個結果,我會希望我的代碼失敗。所以,我想提出一個功能間接運算符的定義質量是什麼?
A& deref_or_throw(std::set<A> s)
{ if (s.size() != 1) throw ...; return *s.begin(); }
拋出,如果集包含多個(或沒有)元素,否則取消引用的第一個元素。
爲了簡便起見,我還以爲重載間接運算符,這是不是std::set
定義:
A& operator*(std::set<A>& s) {return deref_or_throw(s);}
這是一個壞主意?它符合間接運算符的概念,它執行解引用。但是我無法根據標準找到間接操作符應該做什麼的嚴格定義,以確定我是否扭曲了它的標準使用(太遠)。
對我來說這沒有意義。 '*'表示給我指向的對象。我討厭使用不同的操作符,然後在標準類型上做什麼。 – NathanOliver
@NathanOliver:所以你不應該使用運算符'<<'來插入對象到流,因爲這是最初的按位左移運算符... – shrike
@shrike你最初的意思是什麼?當C++在98年被標準化時,它既是篩選器又是流操作器。他們是否應該成立一個新的運營商,idk。現在是否遲到要改變它,是的 – NathanOliver