C++ 定义一个只有特定类才需要的结构的最佳方法是什么?

C++ 定义一个只有特定类才需要的结构的最佳方法是什么?,c++,struct,C++,Struct,给定以下包含MyStruct对象向量的简化类,我应该在哪里定义MyStruct,假设它只在Foo内部使用,不应该从外部看到或使用 class Foo { std::vector<MyStruct> array; }; class-Foo { std::矢量阵列; }; 我遇到的两种可能性是将MyStruct的定义放在Foo的内部,或者使用匿名名称空间。如果您不想在Foo外部使用它,那么最好的方法是在Foo的私有部分声明它 class Foo { struct My_S

给定以下包含
MyStruct
对象向量的简化类,我应该在哪里定义
MyStruct
,假设它只在
Foo
内部使用,不应该从外部看到或使用

class Foo
{
  std::vector<MyStruct> array;
};
class-Foo
{
std::矢量阵列;
};

我遇到的两种可能性是将
MyStruct
的定义放在
Foo
的内部,或者使用匿名名称空间。

如果您不想在Foo外部使用它,那么最好的方法是在
Foo
的私有部分声明它

class Foo
{
    struct My_Struct;
}

如果数组在某种程度上是
Foo
接口的公共部分,请如下声明MyStruct:

class Foo
{
public:
    struct MyStruct { /* stuff */ };
    /* ... */
};
否则:在
Foo
的私有部分声明它。在这种情况下,您必须在
Foo
中定义它,因为它必须 在使用它进行实例化之前,必须完全定义它
std::vector
。否则就要看情况了,;我倾向于用英语来定义它 私有名称空间:实现中的未命名名称空间 文件如果所有函数都在一个源文件中, 否则在私有中,实现头文件在私有中
命名空间(例如,
FooPrivate
),如果不是这样的话。

我会选择Foo内部的名称,但是如果Foo的实现在impl指针后面就更好了。
pimpl习语
是否是避免将
MyStruct
完全定义在头文件中的唯一好方法?您可以使用(private)
array
一种
std::vector
(或更智能的
std::vector
)并在
数组之前预先声明
MyStruct