我正在设计一个将放置在命名空间内的C ++库。
如果我的库的用户只需要我的一个类的前向声明,并且因为你不能在命名空间内对事物进行前向声明,例如class ns_name::class_name;
,我应该
或者,为他们提供一种从我的库中转发声明内容的方法?例如:
#define MD_FORWARD_DECLARE(x) namespace md { x; }
然后可以这样使用:
MD_FORWARD_DECLARE(class foo)
值得吗?
namespace md { class foo; }
?<iosfwd>
?这对我来说似乎最优雅。答案 0 :(得分:2)
正如@molbdnilo指出的那样,使用命名空间进行前向声明没有任何问题。第一个选项根本不是一个选项,由于各种原因我不想包括标题,直到我必须,前向声明始终是首选方式。 为什么不提供带有前向声明的标头,就像许多boost实现一样?例如boost spirit numerics_fwd.hpp?
啊,错过了@DevSolar评论。恕我直言,这是最好的解决方案。