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