支持Scott Meyer建议的C ++ IDE:优先选择成员之外的非成员非朋友功能

时间:2009-11-11 10:27:44

标签: c++ ide code-completion coding-style

Scott Meyer关于非成员函数增加封装并允许更优雅的设计(designwise)的论点对我来说似乎非常有效。 见这里:Article

但我对此有疑问。 (看似其他人,特别是图书馆开发人员,他们通常完全忽视这一点)

当我使用成员函数时,代码通常看起来更好,更合乎逻辑。这可能是一种后天的味道,只是需要一些人习惯首先查看算法,然后再查看对象。 (颤动)

所以也许我只有一个问题:

使用会员功能, 我的 IDE 知道该课程可以做什么。

对我来说,这是巨大的!我没有使用任何不支持成员函数代码完成的编程。在设计良好的库中,它完全取代了我的文档。 即使我要查看api文档,查看成员列表只是感觉绝对自然,合乎逻辑,我可以肯定,这就是结束。如果方法不在那里,我可以放心地认为它不存在,我可以写我的非会员非朋友。

我在STL中忍受了这一点,因为,除了基本组件之外,看到算法是有意义的,因为你已经习惯了它因素。

我还没有看到一个可以告诉我非成员函数在特定类上工作的IDE。

这实际上是我的问题: 是否有IDE(或IDE功能)可以帮助实现此代码约定?

4 个答案:

答案 0 :(得分:5)

我过去曾遇到过这件事。

然后我的想法相当笨拙,但完成了工作:命名空间。

我做的是

namespace myclass
{
    class MyClass
    {
        ...
    };

    MyClass operator+(const MyClass& lhs, const MyClass& rhs){...}
}

答案 1 :(得分:4)

通过最小化可能访问私有状态的函数数量,使用非成员增加封装,Meyers肯定是正确的。但是,封装只是代码质量的许多(通常是冲突的)方面之一。

他确实提出了一个有效的观点,即图书馆作家不一定会为每个可能的类使用编写函数(因为可能存在他们没有想到的用法)。这意味着您可能必须自己添加非成员“帮助”功能,就像他们遵循迈耶斯的建议一样。因此,无法知道成员和朋友函数集确实是唯一一组作用于该类的函数。

作为一个技术专家,我喜欢的“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) - >查找参考资料它确实有效。