3

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

例如我在 Ah foo(int bar); 在 A.cpp 它的实现中,在 Bh foo(int bar); 并在 B.cpp foo(int bar) { foo(bar) }

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

我怎样才能做到这一点?我不想重命名 foo.

更新:

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

更新:

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

4

5 回答 5

4

使用命名空间

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

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

于 2009-02-19T14:12:39.013 回答
3

B 完全继承/实现 A 吗?

如果是这样,您可以使用

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

访问全局命名空间中的 foo

或者如果它不继承..您只能在 B 上使用命名空间

命名空间 B
{
int foo(int bar) { ::foo(bar); }
};
于 2009-02-19T14:23:52.263 回答
1

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

于 2009-02-19T14:12:55.300 回答
1

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

于 2009-02-19T14:24:31.467 回答
0

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

于 2009-02-19T14:21:07.950 回答