2016-08-12 48 views
5

假设一些第三方开发者编写的函数一个已经采取了函数名

int GetErrorCode(const object * p); 

该函数返回只有某些int值,因此我很想写我自己的ErrorCode枚举类,它包含所有可能的返回值。然后写一点更新功能:

enum class ErrorCode : int {}; 
ErrorCode GetErrorCode2(const object * p){ 
    return (ErrorCode)GetErrorCode(p); 
} 

问题是我希望我的功能被命名为GetErrorCode,而不是更少直观GetErrorCode2

我该如何做到这一点?也许有一种方法来交换函数名称或什么?

回答

11

使用命名空间:

namespace MyLibrary { 

    ErrorCode GetErrorCode(const object *p) { 
     int origResult = ::ErrorCode(p); 
     // use :: to explicitly call outer function to avoid recursion 
     ... 
    } 

} 

然后,你可以调用该函数为:

MyLibrary::GetErrorCode(obj); 
2

把你的功能,你通常使用一个命名空间。您可能有一个using namespace foo; - 更好的是,using foo::GetErrorCode; - 对于您使用它的地方,最好在函数的主体中。

+1

我建议反对'using namespace foo;' - 它引入*一切*并且抛出全局命名空间,超出你的需要。首选更具体的'使用foo :: func;'来引入你需要的特定内容,并尽可能缩小范围。或者只是坚持完全限定你使用'foo :: func();'。 –

+0

@JesperJuhl:同意。 '你使用它的地方'应该是函数体,但是'使用foo :: func'更好 - 编辑.. – lorro

+0

using语句只会让名称冲突再次出现,你将名字冲突带回这样做。 – rubenvb

相关问题