C++ 如何正确传递模板参数?

C++ 如何正确传递模板参数?,c++,c++11,templates,parameter-passing,rvalue-reference,C++,C++11,Templates,Parameter Passing,Rvalue Reference,下面的代码没有编译,因为t现在被推断为一个参考(l值或r值,但这与这里无关)。所以std::vector不能再将t作为参数。有人知道解决这个问题的方法吗?谢谢 template<typename T> void func( T&& t ) { std::vector<T> v; } 模板 无效函数(T&T) { std::向量v; } 回答:使用注释中的std::decay。具有推断类型的参数的声明方式取决于您计划如何使用该参数。在所示的声明中

下面的代码没有编译,因为
t
现在被推断为一个参考(l值或r值,但这与这里无关)。所以
std::vector
不能再将
t
作为参数。有人知道解决这个问题的方法吗?谢谢

template<typename T>
void func( T&& t )
{
    std::vector<T> v;
}
模板
无效函数(T&T)
{
std::向量v;
}

回答:使用注释中的
std::decay

具有推断类型的参数的声明方式取决于您计划如何使用该参数。在所示的声明中,您将参数声明为转发引用,转发引用根据调用函数的方式推断模板参数:

  • 如果使用类型为
    X
    的左值调用函数,则参数
    T
    将为
    X&
  • 如果使用类型为
    X
    的右值调用函数,则参数
    T
    将为
    X
结果参数旨在转发到某个地方,最有可能使用

std::forward<T>(t)

请提供一个生成您当前问题的解决方案。请使用,谢谢!成功了!
std::vector<std::decay_t<T>> v;