나는 템플릿 프로그래밍 초보자와 나는 코드 중복을 피하기 위해 노력하고 다음 템플릿 기능을 사용하고 있습니다 :왜이 오버로드 된 함수는 모호합니까?
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는이 옵션을 절반 만 구현 했으므로 MSVS에는이 문제가 있지만 GCC에는 문제가 있음을 상기합니다. 자신이 가지고있는 머리글을보고 거기에서 사용할 수있는 것을 볼 수 있습니다. – chris
long, int, short 및 해당 부호없는 버전의 원시 정수 유형에 사용하고 있습니다. –
std :: to_string에 예상 한 모든 오버로드가없고, long long 또는 unsigned long long 만 있습니다. 나는 그것이 문제라고 생각한다. .. 그 정확한 @ chris 다? –