鉴于以下包含对象向量的简化类,假设它仅在内部使用并且不应从外部看到或使用,MyStruct
我应该在哪里定义?MyStruct
Foo
class Foo
{
std::vector<MyStruct> array;
};
我遇到的两种可能性是将MyStruct
正确的定义放在匿名命名空间中Foo
或使用匿名命名空间。
如果数组是Foo
接口的公共部分,请像这样声明 MyStruct:
class Foo
{
public:
struct MyStruct { /* stuff */ };
/* ... */
};
否则:在Foo
.
在这种情况下,您必须在 中定义它Foo
,因为在使用它来实例化之前必须完全定义它
std::vector
。否则,这取决于;我倾向于在私有命名空间中定义它:如果所有函数都在一个源文件中,则在实现文件中定义一个未命名的命名空间,否则在私有命名空间(例如FooPrivate
)中的私有实现头文件中(如果它们不是)吨。
如果你不希望它在 Foo 之外使用,那么最好的方法是在私有部分声明它Foo
class Foo
{
struct My_Struct;
}