我有一个界面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
,或者它可以正常使用吗?
提前致谢
答案 0 :(得分:2)
一个定义规则不适用于typedef
。 typedef
(单独)不定义新变量,函数,类类型,枚举类型或模板。您明确允许重新定义以前的 typedef-name 以引用它已引用的类型。
7.1.3 [dcl.typedef]:
在给定的非类作用域中,可以使用
typedef
说明符重新定义该作用域中声明的任何类型的名称,以引用它已引用的类型。