我有一大堆的重載所有[u]int{8|16|32|64}_t
類型的函數:「長unsigned int類型」爲「uint32_t的」曖昧呼叫
std::string f(uint8_t) { /*something*/ }
std::string f( int8_t) { /*something*/ }
std::string f(uint16_t) { /*something*/ }
std::string f(int16_t) { /*something*/ }
std::string f(uint32_t) { /*something*/ }
std::string f(int32_t) { /*something*/ }
std::string f(uint64_t) { /*something*/ }
std::string f(int64_t) { /*something*/ }
//A few more overloads with a few more types (bool, float, const char*, etc.)
我現在調用該函數的名稱與long unsigned int
類型的參數:
template <typename type_blah> class Something { public:
//...
std::string call_f(void) const {
return f(*((type_blah*)(internal_variable)));
}
//...
};
這產生一個錯誤:
error: call of overloaded 'f(long unsigned int&)' is ambiguous
我想這會發生,因爲unsigned int
和uint32_t
是不同的類型。但是,我不能爲long unsigned int
更多地重載函數,因爲這是一個冗餘定義。 I.e .:
std::string f(long unsigned int) { /*something*/ }
。 。 。生產:
error: 'std::string f(uint32_t)' previously defined here
看來類機構對彼此的工作:它無法弄清楚要使用的轉換,因爲每次轉換都同樣有效,但無轉換超載不能因爲它已經被定義了。
由於各種原因,我無法施展參數。有沒有辦法呢?
平臺是在Windows 7 x86-64上運行的g ++ MinGW x86。
能你請[SSCCE](http://sscce.org/)向我們展示?或者至少是函數聲明和你如何調用它? –
你使用的編譯器有32位的「long」嗎? –
@MatsPetersson:我不確定這可以解釋它。假設OP按照他的說法創建了重載,那麼'f(some_unsigned_long)'應該完全匹配至多一個重載。 –