clang Неявное предупреждение о преобразовании в шаблонной функции. Делать преобразование явным правильным решением? - PullRequest
0 голосов
/ 26 апреля 2020

От обновления 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);
    }
...