鉴于此代码
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?
答案 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类型都需要相同或可转换。