一个已经采取了函数名
问题描述:
假设一些第三方开发者编写的函数一个已经采取了函数名
int GetErrorCode(const object * p);
该函数返回只有某些int
值,因此我很想写我自己的ErrorCode
枚举类,它包含所有可能的返回值。然后写一点更新功能:
enum class ErrorCode : int {};
ErrorCode GetErrorCode2(const object * p){
return (ErrorCode)GetErrorCode(p);
}
问题是我希望我的功能被命名为GetErrorCode
,而不是更少直观GetErrorCode2
。
我该如何做到这一点?也许有一种方法来交换函数名称或什么?
答
使用命名空间:
namespace MyLibrary {
ErrorCode GetErrorCode(const object *p) {
int origResult = ::ErrorCode(p);
// use :: to explicitly call outer function to avoid recursion
...
}
}
然后,你可以调用该函数为:
MyLibrary::GetErrorCode(obj);
答
把你的功能,你通常使用一个命名空间。您可能有一个using namespace foo;
- 更好的是,using foo::GetErrorCode;
- 对于您使用它的地方,最好在函数的主体中。
我建议反对'using namespace foo;' - 它引入*一切*并且抛出全局命名空间,超出你的需要。首选更具体的'使用foo :: func;'来引入你需要的特定内容,并尽可能缩小范围。或者只是坚持完全限定你使用'foo :: func();'。 –
@JesperJuhl:同意。 '你使用它的地方'应该是函数体,但是'使用foo :: func'更好 - 编辑.. – lorro
using语句只会让名称冲突再次出现,你将名字冲突带回这样做。 – rubenvb