给定这段代码
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)...};
}
注意,代码选择第一个参数类型作为 vector 模板参数,所有Args类型需要相同或可转换。
关于c++ - 这个转发函数中如何自动推导出T?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28868836/