C++ C++;同名包装器?

C++ C++;同名包装器?,c++,wrapper,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在全局名称空间中,我无法更改它,所以我想使用名称空间不是一个选项 更新:

如何实现一个包装器函数,该函数调用另一个与全局命名空间中的包装器函数本身具有完全相同的名称和参数的函数

例如,我在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()调用全局命名空间函数使用命名空间

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

您还可以使用名称空间A编写;但强烈建议不要在头中使用名称空间进行编写。

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

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

B是否继承/实现了A

如果是这样,你可以使用

int B::foo(int bar) { ::foo(bar); } intb::foo(intbar) { ::富(巴); } 访问全局命名空间中的foo

namespace A
{
int foo(int bar);
};
namespace B
{
int foo(int bar) { A::foo(bar); }
};
或者如果它没有继承。。您只能在B上使用名称空间

namespace B { int foo(int bar) { ::foo(bar); } }; 命名空间B { intfoo(intbar){::foo(bar);} };
如果不使用名称空间、更改其中一个函数的名称、更改签名或使其中一个函数保持静态,则无法执行此操作。问题是不能有两个名称相同的函数。因此,需要有一些东西使它们与众不同。

只要可以将B.h更改为将其foo()放入名称空间,那么您仍然可以这样做。名称空间不是一个选项吗?你想让B使用A的命名空间,对吗?您不能更改名称空间吗?所以问题是,你永远不需要改变A。让B调用A::foo(),如果你不能改变B,那么就没什么可做了。看起来你什么都不能改变;)@换行符-您在编辑中提到不能更改
A
,请注意,如果您可以将
B
更改为命名空间中,则这仍然可以工作-B::foo()只需使用
::foo(bar)
调用A的foo(),以指示它要在全局命名空间中调用foo()。