在我们庞大的代码库中,在其中一个包含文件中,我们有声明
using std::some_function
但是,我想“取消使用”some_function
并使用其他some_function
。我无法修改此标头,因为大多数代码都取决于它。
是否有可能这样做?
答案 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::
,或者只使用其他名称