如何在此转发函数中自动推导T

How to automatically deduce T in this forwarding function?

本文关键字:函数 转发      更新时间:2023-10-16

给定此代码

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?

您可以这样做:

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类型都需要相同或可转换。