C ++:使用嵌套结构是否相关?

问题描述 投票:0回答:1

我正在尝试定义一个具有私有结构和公共结构的类。

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。如果有原因,我想知道它们是什么。

c++ struct nested private public
1个回答
0
投票

通常,这不是做生意的好方法。

不需要公开就可以将事物保密。

只要您无需在此类之外访问SNode的机器,就很好。但是,由于A是类

template

,因此您将为每个使用的SNode拥有一个T的副本。模板就是这样工作的。这意味着更多的代码和更大的可执行文件。因此,您可能会考虑采用更传统的方法,即仅将实用程序类型放在名称空间中。人们是否尝试在A<T>之外使用它们真的有关系吗?

© www.soinside.com 2019 - 2024. All rights reserved.