gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:09:44 24 4
gpt4 key购买 nike

以下代码无法编译,因为 T 现在被推断为引用(左值或右值,但这与此处无关)。所以 std::vector 不能再将 T 作为参数。有谁知道解决这个问题的方法吗?谢谢!

template<typename T>
void func( T&& t )
{
std::vector<T> v;
}

答案:使用 std::decay 作为注释。

最佳答案

如何声明具有推导类型的参数取决于您打算如何使用参数。在显示的声明中,您将参数声明为转发引用,它根据调用函数的方式推导模板参数:

  • 如果使用 X 类型的左值调用函数,则参数 T 将为 X&
  • 如果使用 X 类型的右值调用函数,则参数 T 将为 X

结果参数旨在转发某处并且最有可能使用

std::forward<T>(t)

如果你宁愿使用你的论点(即,论点在某处是坑),你可能会被打败以按值(value)接受它(即,你会使用 f(T t))和 std::move(t) 将值放入其最终目的地。您可能想阅读参数但不想使用它,在这种情况下您应该将其作为 T const& 传递。

假设转发引用的使用是有意的,你应该声明你 std::vector 具有从推导类型中获得的相应类型,例如

std::vector<std::decay_t<T>> v;

关于c++ - 如何正确传递模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46005799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com