0

鉴于以下包含对象向量的简化类,假设它仅在内部使用并且不应从外部看到或使用,MyStruct我应该在哪里定义?MyStructFoo

class Foo
{
  std::vector<MyStruct> array;
};

我遇到的两种可能性是将MyStruct正确的定义放在匿名命名空间中Foo或使用匿名命名空间。

4

3 回答 3

1

如果数组是Foo接口的公共部分,请像这样声明 MyStruct:

class Foo
{
public:
    struct MyStruct { /* stuff */ };
    /* ... */
};

否则:在Foo.

于 2013-08-09T15:03:14.533 回答
1

在这种情况下,您必须在 中定义它Foo,因为在使用它来实例化之前必须完全定义它 std::vector。否则,这取决于;我倾向于在私有命名空间中定义它:如果所有函数都在一个源文件中,则在实现文件中定义一个未命名的命名空间,否则在私有命名空间(例如FooPrivate)中的私有实现头文件中(如果它们不是)吨。

于 2013-08-09T15:39:01.150 回答
0

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

class Foo
{
    struct My_Struct;
}
于 2013-08-09T15:01:39.393 回答