I가 다음과 같은 함수 템플릿잘못된 캐스트 오류는 일반적인 유형에 따라 달라집니다
template<typename T>
T foo(){
if(std::is_same<T,int>::value){
return 1;
}
if(std::is_same<T,std::string>::value){
return "Hello";
}
}
I는 다음과 같이 적용 할 :
int main(){
std::cout << foo<int>() << std::endl; // 1
std::cout << foo<string>() << std::endl; // "Hello"
}
내가 컴파일하려고하면 내 템플릿 컴파일러에서 다음과 같은 오류가 발생합니다 : error: cannot initialize return object of type 'int' with an lvalue of type 'const char [6]'
.
if
문을 모두 제거하면 올바른 결과를 얻을 수 있으므로 std::is_same<T,int>::value
이 의도 한대로 작동합니다.
컴파일러가 T
의 유형을 감지 것 같다, 모든 return
진술이 일치하고 std::string
암시 int
스트 없기 때문에 오류가 발생합니다 확인합니다.
누구나 내 의도를 충족시키는 해결책이나 다른 해결책이 있습니까?
편집
내 의도를 설명하기 : I 데이터베이스 커서 클래스의 래퍼 클래스를 쓰고 있어요. 이러한 커서는 보통 정의되어 있으므로 getInt()
또는 getString()
과 같은 여러 멤버 함수가 있습니다. 내 생각은 T
에 따라 해당하는 커서 멤버 함수를 사용하는 일반 get<T>()
을 구현하는 것이 었습니다.
C++ (17) 당신이 의지를 일부 컴포넌트를 컴파일 할 수 없도록하는'if constexpr'을 얻으십시오. 지금 당장 코드의 모든 부분은 * all * 가능한 유형'T'에 대해 유효해야합니다. 함수에 별도의 오버로드를 추가해야합니다. –