От обновления clang до 10 этот код теперь дает implicit conversion warnings.
Это для синтаксического анализа JSON, и поскольку JSON работает с JavaScript, а JavaScript имеет свободные правила конвертации, я не уверен, что делать с переполнение правильно. Это ситуация, когда я хочу отключить предупреждение, или я должен сделать преобразование типа явным в шаблоне? Как бы я сделал это с помощью функции шаблона? В идеале я бы хотел использовать стиль c. Любые другие возможные решения?
template <typename T>
bool TryConvertNumber(const FJsonValue& InValue, T& OutNumber)
{
double Double;
if (InValue.TryGetNumber(Double) && (Double >= TNumericLimits<T>::Min()) && (Double <= TNumericLimits<T>::Max()))
{
OutNumber = static_cast<T>(FMath::RoundHalfFromZero(Double));
return true;
}
return false;
}
bool FJsonValue::TryGetNumber(float& OutNumber) const
{
double Double;
if (TryGetNumber(Double))
{
OutNumber = static_cast<float>(Double);
return true;
}
return false;
}
bool FJsonValue::TryGetNumber(uint64& OutNumber) const
{
return TryConvertNumber(*this, OutNumber);
}
bool FJsonValue::TryGetNumber(int64& OutNumber) const
{
return TryConvertNumber(*this, OutNumber);
}