,纔有可能和/或有用的用戶定義文字以限定operator "" (...)
爲朋友功能?的C++ 0x,與操作者的朋友「」()
class Puzzle {
friend Puzzle operator "" _puzzle(const char*, size_t);
...
};
void solve(Puzzle);
int main() {
solve("oxo,xox"_puzzle);
};
我在想「有用」,尤其是,因爲operator ""
應在命名空間中只能被定義規則的 - 而不是一個重要原因在於_
開始的名稱在全局命名空間保留。這是friend
這裏違反這條規則嗎?所以,這個不太完美的封裝沒有好處,對吧?
我真的認爲我已經在某處讀過它了,後綴*應該*只能在**命名空間**內聲明。我不記得在哪裏 - 但這只是一個建議,而不是要求。因此,這可能是「良好實踐」的唯一提示。關於**模板**好友功能的好處。對於通常的* friend *模式,這不是問題,friend函數至少有一個參數是一個類實例本身 - 那麼就沒有命名問題。 – towi
我記得在早期的立場文件中看到類似的東西。嘗試n2378.pdf第5節:成語。在這裏他們說:1.這些函數不是通過ADL通過文字調用而不是通過顯式的操作符形式找到的。這將引誘在全球範圍內的佈局。 3.即使在不使用文字的代碼中,這也會導致衝突。所以把文字操作放到一個命名空間中,並且使用一個使用指令將它們拉到全局級別。 – emsr
我只是想說明你可以*不*在類中私有地使用朋友函數,參見[這個問題](http://stackoverflow.com/questions/8207633/whats-the-scope-of-inline-friend -功能)。 – Xeo