2012-04-28 72 views
1

我在當前的一個項目中使用第三方C++庫。雖然它們的lib沒有定義自定義名稱空間。所以,他們的所有功能都在那裏。這不是什麼大問題,但理想情況下他們會使用命名空間。在自定義命名空間下包含一個頭部?

是否有可能將#include的頭文件置於某種類型的自定義僞名稱空間下?這樣,它們的所有功能都可以包含在名稱空間中。

+0

是否有單獨的實現文件,或者是庫頭? – 2012-04-28 16:11:18

+0

實現也在那裏,但如果它意味着編輯他們的代碼,我想我寧願直接使用它,沒有名稱空間。 – Ryan 2012-04-28 16:13:25

+1

因爲'#include'實際上是複製粘貼的,所以你可以做'namespace something {#include「header」}',但是如果還有其他文件包含'#include「頭文件」'和don'不要把'namespace {}放在它的周圍(如實現文件)。所以真的沒有辦法手動編輯所有的文件。 – 2012-04-28 16:14:32

回答

1

只要這會改變函數的名稱(對於C++),就不能這樣做。 鏈接器會將名稱空間的名稱附加到該函數,因此由於缺少該函數而導致鏈接失敗。

對於instace以下代碼

namespace MyName 
{ 
    class MyNestedOne 
    { 
    public: 
     void doNothing(); 
    }; 
}; 

功能doNothing將有下列名稱doNothing @ MyNestedOne @ MYNAME @@

0

正如你所說的,如果他們在一個命名空間可能會更好。然而這並不是什麼問題。

或者,如果您可以使用.dll而不是.lib,則可以動態綁定它,使用它並放開它。這樣你就不會有整個運行時間的浮動函數。

相關問題