繁体   English   中英

捕获可变参数模板类型?

[英]Capture the variadic template types?

例如,我有如下代码

template<class... Ts>
void f(Ts... args)
{
}

传递以下参数时

int j = 5;
int& i = j;
f(i);

void g(int& i)
{
    f(i);
}

在上述两种情况下,捕获的类型都是int而不是int&。 如何让它捕获与i相同类型的int&? 谢谢。

类型模板参数推导去除了cv-qualifiers和ref-qualifers(还将数组类型转换为指针类型,并将函数类型转换为函数指针类型。)

如果您希望引用成为推导类型的一部分,请将其添加到声明器中。 const 。)

template<class... Ts>
void f(Ts&... args);

如果要根据参数是左值还是右值将推导类型设为左值引用或右值引用,请使用“通用引用”。

template<class... Ts>
void f(Ts&&... args);

(虽然什么后者的样子,但这并不意味着“只接受右值”,这是非常罕见。对于这种情况,请参阅如何使模板右值引用参数仅绑定到右值引用?

注意:有没有办法让一个函数,通过引用,采用它的参数只有当传入的变量被宣布作为参考。 这是因为引用的行为始终与引用的对象完全一样(应用decltype时除外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM