2011-03-08 84 views
0

我有一個接口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?在我的編譯器上編譯好,但標準的One-Definition Rule是否允許多個相同的typedef聲明?另外,你認爲我應該包括InterfaceFwd.hInterface.h,而不是重新聲明InterfacePtr,或者它是好的嗎?

在此先感謝

回答

2

的一個定義規則並不適用於typedef秒。 A(自己)沒有定義新的變量,函數,類類型,枚舉類型或模板。您明確允許重新定義以前的typedef-name以引用它已經引用的類型。

7.1.3 [dcl.typedef]:

在給定的非類範圍,一個typedef說明符可以用來重新定義該範圍聲明的任何類型的名稱來指代的類型它已經提到。