我试图迭代用户定义的结构hana::for_each
并注意到它被复制/移动,同时Boost.Fusion
允许您就地迭代原始结构。
我没有从in 中找到类似View
概念的东西。如何将转换应用于序列而不每次都复制/移动它们?Boost.Fusion
Boost.Hana
#include <boost/hana.hpp>
#include <iostream>
struct Foo {
Foo() = default;
Foo(const Foo&) { std::cout << "copy" << std::endl; }
Foo(Foo&&) { std::cout << "move" << std::endl; }
};
struct Struct {
BOOST_HANA_DEFINE_STRUCT(Struct,
(Foo, foo)
);
};
int main() {
Struct s;
auto m = boost::hana::members(s); // copy constructor invoked
}
更新:我尝试使用hana::transform
来申请std::ref
成员,但Struct
不是 a Functior
,因此transform
在这种情况下不适用。我能够使用 实现所需的行为hana::accessors
,但对我来说它看起来有点 hacky。我希望有一种方法可以创建视图。
hana::for_each(hana::accessors<Struct>(), [&s](const auto& accessor) {
const auto& member = hana::second(accessor)(s); // No copying
});