C++ 如何在此转发函数中自动推断T?

C++ 如何在此转发函数中自动推断T?,c++,C++,鉴于此代码 template <typename T, typename... Args> auto make_vector(Args&&... args) { return std::vector<T>{std::forward<Args>(args)...}; } 模板 自动生成向量(Args&&…Args) { 返回std::vector{std::forward(args)…..}; } 我不想键入生成向量(1,2,3,4)

鉴于此代码

template <typename T, typename... Args>
auto make_vector(Args&&... args)
{
    return std::vector<T>{std::forward<Args>(args)...};
}
模板
自动生成向量(Args&&…Args)
{
返回std::vector{std::forward(args)…..};
}

我不想键入
生成向量(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)...};
}
模板结构类型{
typedef typename std::decage::type ReturnType;
//typedef std::decation\u t ReturnType;//C++14等效
};
模板
自动生成向量(Args&&…Args)
{
返回std::vector{std::forward(args)…..};
}

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

您想编写一个新函数,只是因为
std::vector{1,2,3,4}
太长?或者您的实际用例有什么不同吗?您可以在衰减第一个参数后使用它的类型。正如给定的那样,对于1或2个参数,此函数可能不一定做正确的事情。对于这些数量的参数,您希望它做什么,即,这个函数做什么而普通向量构造不做什么?@Brian:目的是推断类型,在一般情况下,可能很难或不可能编写。最好在
头上使用
std::detaction
,所以你可以传递l值。@BenjaminLindley谢谢,我看到你可以用一个using别名和
std::decation\t
@0x499602D2来缩短它,谢谢,我明白了