具有相同名称的C ++包装器?

时间:2009-02-19 14:09:39

标签: c++ wrapper

如何在全局命名空间中使用与包装函数本身完全相同的名称和参数调用另一个函数的包装函数?

例如我在A.h foo(int bar);在A.cpp中实现,在B.h foo(int bar);在B.cpp foo(int bar){foo(bar)}

我希望B.cpp的foo(bar)调用A.h的foo(int bar),而不是递归本身。

我该怎么做?我不想重命名foo。

更新

A.h在全局命名空间中,我无法更改它,所以我猜使用命名空间不是一个选项?

更新

命名空间解决了这个问题。我不知道你可以用:: foo()

调用全局命名空间函数

5 个答案:

答案 0 :(得分:4)

使用命名空间

namespace A
{
int foo(int bar);
};
namespace B
{
int foo(int bar) { A::foo(bar); }
};

你也可以用命名空间A写;在你的代码中,但强烈建议不要在头文件中使用命名空间。

答案 1 :(得分:3)

B是否继承/实施A?

如果是这样,你可以使用

int B::foo(int bar) 
{ 
   ::foo(bar); 
}

访问全局命名空间中的foo

或者如果它没有继承..你可以只在B上使用命名空间

namespace B
{
int foo(int bar) { ::foo(bar); }
};

答案 2 :(得分:1)

这是命名空间试图解决的问题。你可以在有问题的foo中添加命名空间吗?然后你有办法解决这个问题。无论如何,如果它们都在全局命名空间中,你会遇到链接器问题。

答案 3 :(得分:1)

如果不使用命名空间,更改其中一个函数的名称,更改签名或使其中一个成为静态,则无法执行此操作。问题是您不能拥有具有相同受损名称的2个函数。所以需要有一些能让它们与众不同的东西。

答案 4 :(得分:0)

如上所述,命名空间是一种解决方案。但是,假设您具有此级别的灵活性,为什么不将此函数封装到类/结构中?