我正在尝试定义一个具有私有结构和公共结构的类。
Private struct是仅由类(例如SNode)使用的结构,并且我不希望它在类外部可见,因为我不希望它被错误地使用(例如新的Node())。因此,我想到了将其设置为基本隐藏的想法。
Public struct是将在外部使用的结构(例如SKeyValuePair),并且将具有指向SNode的指针。
下面是代码示例。
[[类定义]
template <typename T>
class A
{
private:
struct SNode
{
SNode* pParentNode;
SNode* pLeftChildNode;
SNode* pRightChildNode;
...
};
public:
A<T>()
{
}
virtual ~A()
{
}
struct SPair
{
private:
public:
SNode* pNode;
unsigned long long ullKey;
T value;
...
};
const SPair GetMinKeyPair()
{
return SPair(...);
}
const SPair GetNextMinKeyPair()
{
...
return SPair(...);
}
};
[用法]
A a;
...
for (A::SPair pair = a.GetMinKeyPair(); pair.pNode != nullptr; pair = a.GetNextMinKeyPair())
{
...
}
Q1。我不知道是否应由于某种我目前不知道的原因而避免这种嵌套结构(该公共结构包含私有结构指针)。
Q2。如果有原因,我想知道它们是什么。
通常,这不是做生意的好方法。
不需要公开就可以将事物保密。
只要您无需在此类之外访问 templateSNode
的机器,就很好。但是,由于A
是类SNode
拥有一个T
的副本。模板就是这样工作的。这意味着更多的代码和更大的可执行文件。因此,您可能会考虑采用更传统的方法,即仅将实用程序类型放在名称空间中。人们是否尝试在A<T>
之外使用它们真的有关系吗?