如何在此转发功能中自动推断?

时间:2015-03-05 02:14:40

标签: c++

鉴于此代码

template <typename T, typename... Args>
auto make_vector(Args&&... args)
{
    return std::vector<T>{std::forward<Args>(args)...};
}

我不想输入make_vector<int>(1, 2, 3, 4)。如何摆脱T?

1 个答案:

答案 0 :(得分:4)

你可以这样做:

template <typename Head, typename... Tail> struct Types{
   typedef typename std::decay<Head>::type ReturnType;
   //typedef std::decay_t<Head> ReturnType; // C++14 equivalent
};
template <typename... Args>
auto make_vector(Args&&... args)
{

    return std::vector<typename Types<Args...>::ReturnType>{std::forward<Args>(args)...};
}

注意,代码选择第一个参数类型作为矢量模板参数,所有Args类型都需要相同或可转换。