有没有一种方法可以剥离一个std::tuple<T...>
,以便让它回到T...
?
示例
假设vct<T...>
是一个 * 预先存在的*可变类模板,
using U = std::tuple<int,char,std::string>;
using X = vct<int,char,std::string>;
using Y = vct< strip<U> >; // should be same as X
字符串
备注
我知道std::tuple_element,但我需要所有元素,以可用作T...
的形式
作为参考,我找到了这个question,它是类似的,但我的需求有点简单(所以我希望有一个更简单的解决方案):我所需要的只是tuple
中的类型列表-我不关心tuple
示例的实际值。
5条答案
按热度按时间e37o9pze1#
字符串
然后将其用作:
型
现在
Y
与X
相同。q5lcpyga2#
不,这是不可能的。参数包是类型推导的结果,它们不能在其他上下文中产生。
你可以这样做类似于你所要求的:
字符串
实际上,你不需要在元组中保存参数包:任何可变类模板都可以:
型
这是live example。
w8rqjzmb3#
你不能直接“返回”一个参数包,所以你需要的是这样的:
字符串
和使用
型
ia2d9nvy4#
这里的目标是能够将参数包从一个模板的示例复制到另一个模板。我没有将其限制为
tuple
,因为.为什么将其限制为tuple
?字符串
输出为“1 0 1”,如预期。
CopyPackTypes
接受一个目标模板和一个从参数包构造的源类型作为其唯一的参数。然后它将参数包复制到目标模板。一个标准的技术是携带参数包,以创建一个否则没有使用的类型,如:
型
它只作为一个类型列表的占位符存在。然后你可以将其中的一些传递给另一个模板,每个包不会互相“踩”。当你需要将它应用到目标模板时,你可以使用类似上面的“
CopyPackTypes
”来应用它。类似的技术也用于索引包:
型
否则无用的类型是“黑色石板”,携带参数块。
vcirk6k65#
使用C++17
std::apply
。字符串