컨텍스트 : int, bool 및 문자열 속성을 허용하는 public 메서드가있는 속성 백이 있습니다. 그리고 그들 모두는 스 니펫이 아래에 첨부 된 템플릿 개인 함수를 호출합니다.템플릿 유형 지정 검사가 해당 유형을 올바르게 처리하지 못하는 이유는 무엇입니까?
질문 : 템플리트 전문화를 점검하여 해당 특성을 해당 맵에 추가하려고합니다. 그러나 코드 C2440의 컴파일러 오류는 "문자열을 int로 변환 할 수 없으며"C2440은 "문자열을 bool로 변환 할 수 없습니다." 그게 왜 문제인지 나는 잘 모르겠다.
해결 시도 : 정적 캐스팅을 시도했지만 문자열에서 int (또는 bool!)로 변환 할 수 없기 때문에 캐스팅 할 수없는 오류가있는 것처럼 보입니다.
template <typename T>
void PropertyBag::Add(const string& name, const T value)
{
string errorMessage;
if (!IsValidPropertyName(name, errorMessage))
{
m_pFailureHandler->Handle(errorMessage);
return;
}
if (!IsPropertyNameUnique(name, m_content))
{
m_pFailureHandler->Handle("Property '" + name + "' is not unique");
return;
}
if (is_same<T, int32_t>::value)
m_content.intProperties[name] = value;
else if (is_same<T, string>::value)
m_content.stringProperties[name] = value;
else if (is_same<T, bool>::value)
m_content.boolProperties[name] = value;
else
m_pFailureHandler->Handle("Unsupported value type");
}
사용 "만약 당신이이 3 과부하를 만들 제안 형식 검사 (예 : is_same ...)에 대한 일반 "if"대신 "constexpr"(http://en.cppreference.com/w/cpp/language/if#Constexpr_If) –
pre -11 C++, reinterpret_cast <>를 사용할 수 있습니다. 방금 확인한 이후로 안전한 캐스팅이어야합니다. –