2

在我们庞大的代码库中,在其中一个包含文件中,我们有以下语句

using std::some_function

但是,我想“取消使用”some_function并使用另一个some_function. 我无法修改此标头,因为大部分代码库都依赖于它。

有没有可能这样做?

4

2 回答 2

3

我不认为有。您应该将您的函数放在命名空间中并限定其使用:

namespace MyNamespace
{
   void some_function();
}

//...
MyNamespace::some_function();

当然,您能做的最好的事情就是删除using指令并修复代码 - 但我(遗憾地)确实理解为什么这并不总是一种选择。

编辑:也许,由于懒惰,该using指令不存在,但实际上有人希望您在实施自己的some_function.

于 2013-02-18T09:56:41.000 回答
1

取决于您希望“未使用”的范围是什么。

如果它的范围是(到您自己的命名空间,甚至更好地到一个函数),那么您可以放入using MyNamespace::some_function;您的范围。

如果它是全局范围,那么原始标头的作者已经否决了您 - 实际上他们::some_function首先获得了名称,并且他们阻止您将它用于其他任何事情。他们不应该将std函数拉入全局命名空间,但您只需要忍受他们的错误。

假设您不想犯他们所犯的相同错误,您只希望“未使用”应用于一个源文件,而不是您自己将其置于标头中的全局范围内。在这种情况下你可以 #define some_function MyNamespace::some_function,但我不推荐它,因为代码的读者/维护者不会期望必须意识到小写名称实际上是一个宏。

Ifsome_function是一个函数(不是标题中的类),并且您只处理一个重载(例如void some_function(),那么还有另一个丑陋的解决方法。添加另一个参数:

static void some_function(int) { MyNamespace::some_function(); }

然后你可以调用它some_function(0)并获取MyNamespace版本。但是,如果您要输入额外的文本(在这种情况下0),我认为您最好按照预期的方式进行操作:将额外的文本设为MyNamespace::,或者只是使用不同的名称。

于 2013-02-18T10:35:32.977 回答