C++可平凡复制的元组

原文
标::元组,无法优化性能.可平凡复制可使memcpy复制对象进二进制缓冲.

<整 I,型名 T>构 元素持有者{
    用 类型=T;T 值;
};<型名 S,型名...T>构 元组实现;<型名...T,...I>
构 元组实现<引序<I...>,T...>
    :元素持有者<I,T>...{
  元组实现()=默认;
  元组实现(T&&...t):元素持有者<I,T>{前向<T>(t)}...{}
};<型名...T>
构 元组:元组实现<造引序<的大小...(T)>,T...>{
  用 基=元组实现<造引序<的大小...(T)>,T...>;
  用 基::;
};<整 I,型名 T>
推导()(常 元素持有者<I,T>&h){ 中 h.; }<整 I,型名 T>推导()(元素持有者<I,T>&h){ 中 h.; }
//测试代码:

空 测试(){
  元组<,双精>tp(1,2.5);
  双精 t=<1>(tp);
  断定(t==2.5);

  静断(是可平凡复制值<元组<,双精>>);
}

测试表明元组<整,双精>是可平凡复制的.还可以再加一些辅助方法:

<型名 T>构 元组大小;<型名...T>构 元组大小<元组<T...>>
    :公 整常<,的大小...(T)>{};<型名 T>
内联 常式 动 元组大小值=元组大小<退化型<T>>::;<类 F,类 元组,...I>
内联 常式 推导()应用实现(F&&f,元组&&tp,引序<I...>){
  中 调用(前向<F>(f),<I>(前向<元组>(tp))...);
}<类 F,类 元组>
内联 常式 推导()应用(F&&f,元组&&tp){
  中 应用实现(
      前向<F>(f),前向<元组>(tp),
      造引序<元组大小值<移除引用型<元组>>>{});
}
//测试代码:

空 测试(){
  元组<,>tp(42,1);
  静断(是可平凡复制值<推导(tp)>);
  静断(元组大小值<推导(tp)>==2);
  动 中=应用([](整 a,整 b){中 a+b;},tp);
  断定(==43);
}
posted @ 2022-08-28 10:01  zjh6  阅读(41)  评论(0)    收藏  举报  来源