2016-08-12 75 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

相關問題