定义仅某个类所需的结构的最佳方法是什么?

时间:2013-08-09 14:54:59

标签: c++ struct

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

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

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

3 个答案:

答案 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;
}