在我们庞大的代码库中,在其中一个包含文件中,我们有以下语句
using std::some_function
但是,我想“取消使用”some_function
并使用另一个some_function
. 我无法修改此标头,因为大部分代码库都依赖于它。
有没有可能这样做?
在我们庞大的代码库中,在其中一个包含文件中,我们有以下语句
using std::some_function
但是,我想“取消使用”some_function
并使用另一个some_function
. 我无法修改此标头,因为大部分代码库都依赖于它。
有没有可能这样做?
我不认为有。您应该将您的函数放在命名空间中并限定其使用:
namespace MyNamespace
{
void some_function();
}
//...
MyNamespace::some_function();
当然,您能做的最好的事情就是删除using
指令并修复代码 - 但我(遗憾地)确实理解为什么这并不总是一种选择。
编辑:也许,由于懒惰,该using
指令不存在,但实际上有人希望您在实施自己的some_function
.
取决于您希望“未使用”的范围是什么。
如果它的范围是(到您自己的命名空间,甚至更好地到一个函数),那么您可以放入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::
,或者只是使用不同的名称。