gpt4 book ai didi

c++ - 从另一个序列初始化 Boost.Fusion 序列的元素

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:23 25 4
gpt4 key购买 nike

我有一个 Boost.Fusion 元素序列,每个元素都需要用另一个序列的元素进行初始化。当我不使用 Fusion 时,它看起来像:

class A {
A1 a;
A2 b;
A3 c;
};

class B {
B1 a;
B2 b;
B3 c;

B( const A& o ) : a(o.a), b(o.b), c(o.c) {}
};

我用融合 vector 实现这一点的唯一想法是

BVector b( transform( AVector(), magic_functor() ) );

在这个想法中,magic_functor 将为 Ai 提供 Bi 的结果类型,并在其 operator( )。但是,magic_functor 必须知道要转换到的正确类型,这会导致重复的逻辑。

有没有更好的融合初始化的方法?

最佳答案

如果我没理解错的话,你想用 fusion::vector 替换你的类s,像这样:

typedef boost::fusion::vector<A1, A2, A3> A;
typedef boost::fusion::vector<B1, B2, B3> B;

在这种情况下,你可以初始化B来自 A只需使用 vector 's "copy" constructor (它不是真正的复制构造函数,因为它可以接受任何前向序列):

A a(A1(...), A2(...), A3(...)); // instance of A
B b(a); // each element of b is initialized from the
//corresponding element in a

需要注意的是AB甚至不需要是同一种序列:你可以初始化一个 fusion::vector来自fusion::list , 或 fusion::set来自myCustomForwardSequence .

关于c++ - 从另一个序列初始化 Boost.Fusion 序列的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8834479/

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