我如何“不使用”一堂课?

时间:2013-02-18 09:55:15

标签: c++

在我们庞大的代码库中,在其中一个包含文件中,我们有声明

using std::some_function

但是,我想“取消使用”some_function并使用其他some_function。我无法修改此标头,因为大多数代码都取决于它。

是否有可能这样做?

2 个答案:

答案 0 :(得分:3)

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

namespace MyNamespace
{
   void some_function();
}

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

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

编辑:只是可能,由于懒惰,using指令不存在,但实际上有人希望您在实现自己的some_function之前三思而行。

答案 1 :(得分:1)

取决于你想要的“不使用”的范围。

如果它是作用域(到您自己的命名空间或甚至更好的函数),那么您可以将using MyNamespace::some_function;放在您的范围内。

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

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

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

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

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