,才有可能和/或有用的用户定义文字以限定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