繁体   English   中英

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

[英]C++ IDE that supports Scott Meyer's advice: Prefer non-member non-friend functions over members

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

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

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

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

使用成员函数, 我的IDE知道类可以做什么。

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

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

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

这实际上是我的问题:是否有一个IDE(或IDE功能)有助于此代码约定?

我过去曾遇到过这件事。

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

我做的是

namespace myclass
{
    class MyClass
    {
        ...
    };

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

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

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

作为技术专家,我喜欢的“IDE”(文本编辑器和shell)具有以下“功能”,这对于查找作用于类的函数非常有用:

find . -name '*.h' -o -name '*.cpp' | xargs grep MyClass

我不能评论“真正的”IDE。

我不相信IDE可以告诉您可以在课堂上使用的所有非成员函数。 使用模板,制作所有此类功能的列表实在太困难了。 IMO,你可以期待的最好的是IDE能够在编译之前告诉你你正在尝试进行的呼叫是否有效。 甚至这需要在IDE内部进行一些严格的类似编译的过程。

我理解你如何使用成员函数来替代经典类中的文档。 但Scott Meyer所说的设计不是关于提供复杂功能的类,而是基本功能。 复杂的功能来自其他地方,原始类可能会或可能不会知道它,它并不重要。 这都是这个想法的一部分。 但你是对的。 在这种情况下,需要经过深思熟虑的文档。

尝试使用Visual AssistX,它有这个很好的功能:右键单击你的类,Refactor(VA X) - >查找引用。 它确实有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM