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;