【发布时间】:2018-11-02 10:40:43
【问题描述】:
我正在尝试转发声明一些仅在类中私下使用的变量,以限制我在使用该类时必须包含的标头数量。
遗憾的是,我要转发声明的类原来是 typedef,它是我无法编辑的第 3 方库(为了方便起见,我们将其称为“boost::asio::strand”论据)
这个问题Forward declaration of a typedef in C++ 表明唯一的解决方案是:
- 只需包含标题并接受这是不可能的
- 转发声明什么是 typedef 并添加我自己的 typedef
看看第二种解决方案,有什么方法可以保护自己免受库中 typedef 更改的影响,以便编译器在删除/重命名类时抱怨 typedef 而不是使用未定义的类型并制作减少维护方面的麻烦?
【问题讨论】:
-
使用粉刺?͏͏͏͏͏͏͏͏
-
@wally 虽然它确实有效并且肯定消除了包含对象的需要,但这不是我想要做的,因为这意味着与其拥有(例如)私人
std::vector<typedefedThing*>我现在需要一个pimpl*,其中包含std::vector<typedefedThing*>。C&C++ 的概念是你不用为你不用的东西付费,而且我不需要这个额外的对象的成本。跨度> -
第三方库是否在命名空间内?
-
@PasserBy 是的。为了争论,我们可以称这个命名空间为“boost”。
-
您知道,在尝试回答之后,我认为这里没有足够的信息。为什么只需要前向声明?你打算在你的公共界面中使用它吗?在这种情况下,您的用户仍将包含标题。你只私下使用吗?那你为什么只能使用前向声明呢?
标签: c++ c++11 forward-declaration