2012-09-08 6 views
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_caststd::to_string()의 과부하를 컴파일러에게 알리는 데 충분하지만, 아직까지는 C2668: ambiguous call to overloaded function으로 충분하지 않습니다. 내가 뭘 놓치고 있니? 적절한 std::to_string 과부하를 호출하면서 모든 원시 정수 유형에 대해 동일한 코드를 복제하는 것을 피할 수 있습니까?

+2

템플릿 인수로 무엇을 전달합니까? MSVS는이 옵션을 절반 만 구현 했으므로 MSVS에는이 문제가 있지만 GCC에는 문제가 있음을 상기합니다. 자신이 가지고있는 머리글을보고 거기에서 사용할 수있는 것을 볼 수 있습니다. – chris

+0

long, int, short 및 해당 부호없는 버전의 원시 정수 유형에 사용하고 있습니다. –

+0

std :: to_string에 예상 한 모든 오버로드가없고, long long 또는 unsigned long long 만 있습니다. 나는 그것이 문제라고 생각한다. .. 그 정확한 @ chris 다? –

답변

2

질문에 대한 코멘트에서 chris가 지적한대로 문제는 VS2010을 사용하고 있다는 것입니다. VS2010은 C++ 11 표준을 완벽하게 구현하지 못합니다. std::to_stringlong long, unsigned long long, long double에 대한 과부하 만 구현합니다. 이 문제에 대한 자세한 내용은 this 관련 질문을 참조하십시오.

관련 문제