2
我在模板編程初學者,我使用下面的模板函數試圖避免重複代碼:爲什麼這個調用重載函數模糊?
template <class T>
void foo(T iInteger) {
// ... same algorithm for all integer types
std::to_string(static_cast<T>(iInteger)); // C2668: ambiguous call to overloaded function
// ... end of algorithm
}
我foo
功能將只與原始整數類型調用。 我當時天真地認爲static_cast
本來足以告訴編譯器哪個超載使用std::to_string()
,但這似乎還不夠,因爲我仍然得到C2668: ambiguous call to overloaded function
。我錯過了什麼?是否可以避免爲所有原始整數類型重複相同的代碼,同時仍然調用適當的std::to_string
過載?
你作爲模板參數傳入了什麼?我記得MSVS有這個問題,但不是GCC,因爲MSVS只實現了一半的選項。你可以看看你有的頭,並親自看看他們在那裏提供了什麼。 – chris
我將它用於原始整數類型,long,int,short和它們的未簽名版本。 –
我看到std :: to_string沒有我期望的所有重載,它只有long long或unsigned long long。我想這就是問題......那是正確的@chris? –