2012-04-28 87 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,则可以动态绑定它,使用它并放开它。这样你就不会有整个运行时间的浮动函数。