c++ - 这个转发函数中如何自动推导出T?

标签 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?

最佳答案

你可以这样做:

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/

相关文章:

c++ - 模板类——几个问题

链接时未定义 C++ 虚函数 - 为什么?

c++ - 使用排序算法 C++

c++ - 在 C++ 中,如何声明一个只能在外部更改的类成员?

c# - 将托管 dll 注入(inject) native 进程

成员方法中的 C++11 Lambda 函数继承作用域

C++ - 声明结构和类时不允许使用不完整类型

c++ - wxwidget with MinGW [编译/链接到 wxmsw26ud_core ]

c++ - 在参数包中分配模板包装器

c++ - 取消引用已分配特定内存地址的指针