{
    template <typename F>
    static bool castType(const IDataType * type, F && f)
    {
        return castTypeToEither<DataTypeUInt32, DataTypeInt32, DataTypeUInt64, DataTypeInt64, DataTypeFloat32, DataTypeFloat64>(
            type, std::forward<F>(f));
    }
    template <typename From, typename To>
    static void reinterpretImpl(const PaddedPODArray<From> & from, PaddedPODArray<To> & to)
    {
        size_t size = from.size();
        to.resize(size);
        for (size_t i = 0; i < size; ++i)
        {
            to[i] = unalignedLoad<To>(&(from.data()[i]));
        }
    }
public:
    static constexpr auto name = Name::name;
    static FunctionPtr create(const Context &) { return std::make_shared<FunctionReinterpretAs>(); }