在VS中,當你鍵入「class」。您將看到可以調用的功能列表。必須查看15-20個函數的列表,其中一半或更多的成員是不好的。VS2012 - 類接口設計:私人成員功能定位/隱藏
我非常有興趣找到一個隱藏私有成員函數或將它們移動到列表末尾的系統,因此用戶不必滾動瀏覽鎖定函數列表。
我有四個設計類型: 1)命名空間方法隱藏基於 2)類方法隱藏 3)PIMPL版本 4)_前綴
這裏是爲了清楚的代碼:
#pragma once
#include <memory>
using namespace std; // ignore the fact this is global here
struct Hide_Test_Data
{
int value;
};
namespace Hide_Test_Private_Member_Ns
{
void private_function(Hide_Test_Data& data) {}
};
class Hide_Test_Methods
{
public:
Hide_Test_Methods() {}
void private_function(Hide_Test_Data& data) {}
};
class Hide_Test_Methods_Alt
{
public:
Hide_Test_Methods_Alt() {}
void private_function() {}
private:
Hide_Test_Data htd_;
};
class Hide_Test
{
public:
Hide_Test() {}
void public_function()
{
_private_function(); // member function prefixed with _
Hide_Test_Private_Member_Ns::private_function(htd_); // namespace version
htm_.private_function(htd_); // subclass version (no private data)
pimpl->private_function(); // pimpl version (with private data)
}
private:
Hide_Test_Data htd_; // class to hold data
Hide_Test_Methods htm_; // class to hold methods
void _private_function() {}; // _ prefixed member function
unique_ptr<Hide_Test_Methods_Alt> pimpl;
};
注:
的的unique_ptr Hide_Test_Methods_Alt版本具有m燼數據,這是標準的數據。兩者都可以以任何方式實施。
_前綴不隱藏成員數據,但它確實將其移動到列表的末尾。這具有允許用戶在感興趣的情況下看到私人功能的優點。我的主要目標不是隱藏私有成員函數,而是將它們移開。
只要符合小寫字母,使用_'前綴'數據應符合標準的全局範圍。
哪種設計在一般情況下更易於接受?我想我可以舒適地使用這四種設計類型,但我寧願聽到一些關於我可能沒有想到的優點和缺點的意見。
Pimpl使用指針輕鬆複製成員數據。在我不需要複製成員數據的情況下,只是使用一個更好或更差的類?
我已經做了一些研究,發現在這個論壇上一些相關的主題:
Hiding private data members? (C++) - 這其中指出PIMPL方法(這是我加入到我的例子以上)。
How to hide private members of a Class? - 約VS智能感知沒有隱瞞私有成員
Why does Visual Studio's intellisense show private members and functions?會談 - 讓#ifdef來解決,我真的不喜歡的想法。
我覺得這個問題不同於其他人提出的值得發佈。一如既往地感謝。
嘗試VS2013?它隱藏了來自intellisense的私人成員。 – Jon
我聽說過。但是,不,還沒有。不想使用Windows 7. – David
我開始認爲由於缺乏反應,這肯定是一個糟糕的問題。 – David