[英]c++ internal helper class
我想問一下關於 C++ 中的內部助手類的問題。 構建此結構的最佳方法是什么?
讓我通過示例闡明內部幫助程序類的含義。
// MyClass.h
class MyClass
{
int myData;
bool isSomething;
...
public:
void DoSomething();
};
// MyClass.cpp
// This is what I mean by internal helper function. Helper function that's only visible int the implementation file (.cpp) but requires access to the private members of the class.
static void DoSomethingInternal( MyClass *myClass )
{
// Access myClass private members
}
void MyClass::DoSomething()
{
...
DoSomethingInternal(this);
...
}
我知道聲明朋友函數可以是一個解決方案。 然而,它使類聲明變得丑陋。 另外,對於每一個新的輔助函數,我都必須添加一個友元函數。
有這方面的習慣用法/設計模式嗎? 我一直在互聯網上搜索,但沒有找到任何。
先感謝您。 非常感謝您的回答。
根據我的經驗,許多開發團隊對靜態本地輔助函數沒有任何問題,它有助於減少標題膨脹,有助於保持正式公開的界面更小,等等。 它的優點是輕量級,缺點是如果您使用大量私有成員且沒有訪問器,則可能導致朋友膨脹/污染。
但是在討論社區中,它通常不贊成以下內容。
這具有將 fn _doThingsForFoo(Foo*)
與Foo
明確關聯的優點,並使您免於暴露私有成員的許多麻煩。
它的缺點是基本上向需要#include您的標題的每個人展示您的內衣。
您聲明了第二個類,即“私有實現”( https://en.wikipedia.org/wiki/Opaque_pointer,pImpl 習語真的在實踐中使用了嗎? ),然后將所有您不想要的私有內容放入主標題到那個。
它的優點是允許你隱藏你的東西,它的缺點是添加一個額外的指針來饋送、存儲和遍歷(哦,免費)。
有幾種方法可以實現這一點。
如果輔助函數不需要直接訪問數據,請在 .cpp 文件中使用輔助類/函數。 我會在下一個方法之前推薦這種方法。
在 .cpp 文件中:
// Create a namespace that is unique to the file namespace MyClassNS { namespace HelperAPI { void DoSomethingInternal(MyClass* obj) { ... } } } using namespace MyClassNS; void MyClass::DoSomething() { ... // HelperAPI::DoSomethingInternal(this); ... }
使用疙瘩成語。 使用這個習慣用法時,您可以在私有數據類中添加任意數量的輔助函數,而無需觸及該類的公共接口。
設計模式很簡單: 不要使用輔助類。 如果一個類應該做某事,讓它自己做。
根據 StenSoft 給出的贊成答案,您應該在類中實現這些方法。 但是,如果由於某種原因這不是一個選項,那么請使用助手。 如果這不是一個選項,那么使用反射。 如果這不是一個選項,那么在您的類中使用命令偵聽器。 如果這不是一個選項,那么觀看教程。
為此,您可以閱讀以下網站PIMPL ,不透明指針。 有了這個,你只需要一個成員變量,你就可以把所有私有的東西放到私有類中。
你的標題:
class PrivateClass;
class Class
{
public:
// ...
private:
PrivateClass* m_Private;
};
你的消息來源:
class PrivateClass
{
// ...
};
Class::Class
: m_Private( new PrivateClass )
{
// ...
}
更新:我忘了告訴提及刪除析構函數中的私有成員。
Class::~Class
{
delete m_Private;
// ...
}
// ...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.