在C++中从元组填充现有结构体的最有效方法是什么?

oxf4rvwz  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(114)

这是我先前提出的另一个问题的后续。
假设我有:

struct foo {
  int x;
  std::string y;
  some_big_class z;
};

foo s;

现在我正在迭代一堆tuple<int, std::string, some_big_class>,我想对每个元组,用元组中的值填充s,然后对s做一些事情。
假设我可以std::move元组,那么最有效的方法是什么?
我可以重写结构体,使用一个元组作为存储,然后有一个移动构造函数来接受元组,但这看起来并不太优雅,因为我所有的访问器都必须跟踪元组中的哪个元素是“他们的”,等等。(这个例子只是一个玩具例子;我真实的的结构有很多元素)。
我上一个问题的解决方案涉及到使用std::make_from_tuple高效地创建一个 new foo对象。这个问题是关于有效地将元组的内容转移/移动到 existing foo对象中。

kkbh8khc

kkbh8khc1#

你可以用

std::tie(s.x, s.y, s.z) = std::move(the_tuple);

如果结构体和元组之间的顺序不同,或者元组中的元素比需要的多,这也可以让你随意移动元素:

std::tie(s.x, s.z, std::ignore, s.y) = std::move(the_tuple);

相关问题