【问题标题】:shared pointer forward declaration共享指针前向声明
【发布时间】:2011-03-08 11:14:53
【问题描述】:

我有一个接口Interface。 我还有一个 .h 文件 InterfaceFwd.h 看起来像

#ifndef Blah
#define Blah
#include <boost/shared_ptr.hpp>
class Interface;
typedef boost::shared_ptr<Interface> InterfacePtr;
#endif

我也有 Interface.h

#ifndef SomeOtherBlah
#define SomeOtherBlah
class Interface
{
   virtual ~Interface()
   { 
   }
   ... 
};
typedef boost::shared_ptr<Interface> InterfacePtr;
#endif

我是否需要担心如果两个文件都包含在内,会有重复的 InterfacePtr 声明?在我的编译器上,这编译得很好,但是标准的单一定义规则是否允许多个相同的 typedef 声明?另外,您认为我应该将InterfaceFwd.h 包含在Interface.h 中,而不是重新声明InterfacePtr,否则就可以了?

提前致谢

【问题讨论】:

    标签: c++ typedef forward-declaration shared-ptr


    【解决方案1】:

    单一定义规则不适用于typedefs。 typedef(单独)没有定义新的变量、函数、类类型、枚举类型或模板。明确允许您重新定义以前的 typedef-name 以引用它已经引用的类型。

    7.1.3 [dcl.typedef]:

    在给定的非类范围内,typedef 说明符可用于重新定义在该范围内声明的任何类型的名称,以引用它已经引用的类型。

    【讨论】:

      猜你喜欢
      • 2017-04-24
      • 2017-04-19
      • 2011-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      相关资源
      最近更新 更多