У меня есть следующий шаблон функции для возврата определенного типа данных из VARIANT
в соответствии с заданным typename
.
template <typename T>
T VariantGetValue(VARIANT Variant) {
std::string S(typeid(T).name());
if (S == "wchar_t* __ptr64") { return Variant.bstrVal; }
if (S == "unsigned int") { return Variant.uintVal; }
}
Итак, поскольку мне нужно было вернуть тип unsigned int
из VARIANT
, я попытался использовать вышеуказанную функцию, например:
return VariantGetValue<unsigned int>(CV);
Но, к сожалению, компилятор здесь игнорирует регистр if (S == "....)
и выдает ошибку:
C2440 — «возврат»: невозможно преобразовать из «BSTR» в «целое число без знака»
Но если я удалю строку if (S == "wchar_t* __ptr64") { return Variant.bstrVal; }
, компилятор выдаст мне только следующее предупреждение:
C4715 — «VariantGetValue»: не все пути управления возвращают значение
Могу ли я подавить эту ошибку и продолжить? Это безопасно или есть альтернативные способы сделать это без ошибок компилятора?
VARIANT
? - person Justin   schedule 20.07.2017VARIANT
type — это структура, которая может содержать несколько типов данных. - person GTAVLover   schedule 20.07.2017std::variant
и не игнорировать предупреждения? - person Passer By   schedule 20.07.2017std::variant
, я также нашел его здесь и попробую теперь, к сожалению, я все еще не могу использоватьboost::variant
из-за этой проблемы, которую до сих пор нельзя исправить. - person GTAVLover   schedule 20.07.2017