从另一个序列初始化Boost.Fusion序列的元素
Initializing the elements of a Boost.Fusion sequence from another sequence
我有一个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) {}
};
我用Fusion矢量实现这一点的唯一想法是类似
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;
在这种情况下,只需使用vector
的"复制"构造函数(它不是真正的复制构造函数,因为它可以接受任何前向序列),就可以从A
初始化B
:
A a(A1(...), A2(...), A3(...)); // instance of A
B b(a); // each element of b is initialized from the
//corresponding element in a
需要注意的是,A
和B
甚至不需要是同一种序列:您可以从fusion::list
初始化fusion::vector
,或者从myCustomForwardSequence
初始化fusion::set
。
您可以创建一个未初始化的b版本(可能需要特殊的构造函数),然后只使用copy:
BVector b(no_init);
boost::fusion::copy( a, b );
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 传入一个函数,该函数递增 boost::fusion:vector 的元素
- 如何在运行时在boost::fusion::vector中查找元素
- 从另一个序列初始化Boost.Fusion序列的元素
- 访问boost::fusion::tuple中的第0个元素
- 制作 boost:::fusion::result_of::as_set<> 的实例不调用其元素的构造函数
- 对boost.fusion矢量中元素的引用