簡體   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