gpt4 book ai didi

c++ - 如何衰减所有可变模板参数?

转载 作者:行者123 更新时间:2023-11-28 01:33:42 25 4
gpt4 key购买 nike

有没有办法将变量模板参数包中的所有类型衰减为它们的值类型?

例如:

template < typename... T >
void foo( T... ts ) // I do not want to have references here
{
}
template < typename... T >
void bar( T&&... ts )
{
foo( ts );
}

所以,我想做的是 std::decay ,但在整个可变参数模板包上。如何做到这一点?

如果我这样调用这些函数:

struct A{
};
A a;
bar( 3, a, 5.5f );

然后我希望所有内容都被复制并按值传递给函数 foo

PS:我的编译器是gcc 6.2.0,最高支持c++17

最佳答案

template < typename... T > void foo( T... ts ); 的模板参数推导总是会推断出一个“腐朽”的类型。 (实际上,decay 的最初目标是执行按值传递时获得的类型转换。)

当然,用户还是可以显式写foo<int&>(...) .如果你关心这些事情(墨菲/马基雅维利等),一个static_assert应该足够了:

static_assert((std::is_same_v<T, std::decay_t<T>> && ...), "Hello, Machiavelli!");

关于c++ - 如何衰减所有可变模板参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50347692/

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