是否应该从名称空间库中声明类?

时间:2015-06-16 11:00:03

标签: c++ namespaces forward-declaration

我正在设计一个将放置在命名空间内的C ++库。

如果我的库的用户只需要我的一个类的前向声明,并且因为你不能在命名空间内对事物进行前向声明,例如class ns_name::class_name;,我应该

  • 告诉他们包含整个包含该类的头文件,
  • 或者,为他们提供一种从我的库中转发声明内容的方法?例如:

    #define MD_FORWARD_DECLARE(x) namespace md { x; }
    

    然后可以这样使用:

    MD_FORWARD_DECLARE(class foo)
    

    值得吗?

  • 或者,让他们自己做namespace md { class foo; }
  • 或者,如DevSolar所述,制作一个包含前向声明的专用头文件,例如<iosfwd>?这对我来说似乎最优雅。

1 个答案:

答案 0 :(得分:2)

正如@molbdnilo指出的那样,使用命名空间进行前向声明没有任何问题。第一个选项根本不是一个选项,由于各种原因我不想包括标题,直到我必须,前向声明始终是首选方式。 为什么不提供带有前向声明的标头,就像许多boost实现一样?例如boost spirit numerics_fwd.hpp?

啊,错过了@DevSolar评论。恕我直言,这是最好的解决方案。