他们是否可以使用与成员函数相同的"点"表示法在对象上使用非成员非友元函数?
我可以从一个类中拉出(任何)成员,并让用户以他们一直使用的方式使用它吗?
更长的解释:
Scott Meyers,Herb Sutter等人认为,非成员非朋友函数是对象接口的一部分,可以改进封装.我同意他们.
但是,在最近阅读本文之后:http://www.gotw.ca/gotw/084.htm我发现自己质疑语法含义.
在这篇文章中,香草提出了具有单insert
,erase
和replace
成员,以及多个同名的非成员非友元函数.
这是否意味着,正如我认为的那样,Herb认为某些函数应该与点符号一起使用,其他函数应该作为全局函数使用?
std::string s("foobar"); s.insert( ... ); /* One like this */ insert( s , ...); /* Others like this */
编辑:
感谢大家提供的非常有用的答案,但是,我认为我的问题的观点被忽略了.
我特别没有提到运营商的具体情况,以及他们如何保留"自然"符号.也不应该将所有内容都包装在命名空间中.这些东西写在我链接的文章中.
问题本身是:
在文章中,Herb建议一个insert()方法是成员,而其余的是非成员非朋友函数.
这意味着要使用一种形式的insert(),你必须使用点符号,而对于其他形式,则不需要.
这只是我,还是听起来很疯狂?
我有一种预感,也许你可以使用单一语法.(我在想如何Boost :: function可以为mem_fun取一个*this参数).