共享指针转发声明

时间:2011-03-08 11:14:53

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

我有一个界面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,或者它可以正常使用吗?

提前致谢

1 个答案:

答案 0 :(得分:2)

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

7.1.3 [dcl.typedef]:

  

在给定的非类作用域中,可以使用typedef说明符重新定义该作用域中声明的任何类型的名称,以引用它已引用的类型。