C ++ 11使用auto和decltype返回类型推导

时间:2018-03-10 16:17:48

标签: c++ c++11 templates decltype

我正在尝试编写一个将矢量与标量值相乘的函数。 我想返回一个具有最高数据类型的Vector。

当我编译下面的代码时,我得到错误 “错误:decltype的参数必须是表达式”

我该如何解决这个问题?

template<typename T>
class Vector {
private:
    T* data;
    int length;

    template <typename S>
    auto operator*(S scalar) const /
    -> decltype(Vector<typename std::common_type<S,T>::type>);
    {
        // Function Logic
    }
}

1 个答案:

答案 0 :(得分:1)

decltype用于确定表达式的类型。 Vector<typename std::common_type<S, T>::type> 已经一种类型。所以没有什么可以使用decltype

此外,这不是退货类型扣除。它只是一个后期指定的返回类型,在这种情况下是不必要的,因为返回类型不依赖于任何参数名称。你可以轻松地做到这一点:

template<typename S>
Vector<typename std::common_type<S,T>::type operator*(S scalar) const