Scott Meyer关于非成员函数增加封装并允许更优雅的设计(designwise)的论点对我来说似乎非常有效。 见这里:Article
但我对此有疑问。 (看似其他人,特别是图书馆开发人员,他们通常完全忽视这一点)
当我使用成员函数时,代码通常看起来更好,更合乎逻辑。这可能是一种后天的味道,只是需要一些人习惯首先查看算法,然后再查看对象。 (颤动)
所以也许我只有一个问题:
使用会员功能,我 和我的 IDE 知道该课程可以做什么。
对我来说,这是巨大的!我没有使用任何不支持成员函数代码完成的编程。在设计良好的库中,它完全取代了我的文档。 即使我要查看api文档,查看成员列表只是感觉绝对自然,合乎逻辑,我可以肯定,这就是结束。如果方法不在那里,我可以放心地认为它不存在,我可以写我的非会员非朋友。
我在STL中忍受了这一点,因为,除了基本组件之外,看到算法是有意义的,因为你已经习惯了它因素。
我还没有看到一个可以告诉我非成员函数在特定类上工作的IDE。
这实际上是我的问题: 是否有IDE(或IDE功能)可以帮助实现此代码约定?
答案 0 :(得分:5)
我过去曾遇到过这件事。
然后我的想法相当笨拙,但完成了工作:命名空间。
我做的是
namespace myclass
{
class MyClass
{
...
};
MyClass operator+(const MyClass& lhs, const MyClass& rhs){...}
}
答案 1 :(得分:4)
他确实提出了一个有效的观点,即图书馆作家不一定会为每个可能的类使用编写函数(因为可能存在他们没有想到的用法)。这意味着您可能必须自己添加非成员“帮助”功能,就像他们遵循迈耶斯的建议一样。因此,无法知道成员和朋友函数集确实是唯一一组作用于该类的函数。
作为一个技术专家,我喜欢的“IDE”(文本编辑器和shell)具有以下“功能”,这对于查找作用于类的函数非常有用:
find . -name '*.h' -o -name '*.cpp' | xargs grep MyClass
我无法评论“真正的”IDE。
答案 2 :(得分:1)
我不相信IDE可以告诉您可以与您的班级一起使用的所有非会员功能。使用模板,制作所有此类功能的列表实在太困难了。 IMO,你可以期待的最好的是IDE能够在编译之前告诉你你正在尝试进行的呼叫是否有效。甚至这需要在IDE中进行一些类似编译的严格过程。
我理解您如何使用成员函数替代经典类中的文档。但Scott Meyer所说的设计不是关于提供复杂功能的类,而是基本功能。复杂的功能来自其他地方,原始类可能会或可能不会知道它,它并不重要。这都是这个想法的一部分。但你是对的。在这种情况下,需要重新考虑经过深思熟虑的文档。
答案 3 :(得分:1)
尝试使用Visual AssistX,它有这个很好的功能:右键单击你的类,Refactor(VA X) - >查找参考资料它确实有效。