【发布时间】:2019-01-16 22:33:46
【问题描述】:
我正在使用 Boost.Hana 迈出第一步,所以请多多包涵。我有
#include <boost/hana.hpp>
namespace hana = boost::hana;
using namespace hana::literals;
#include <string>
struct A
{
int integer;
std::string string;
};
int main()
{
auto tuple = hana::make_tuple(42, "42");
A a;
hana::for_each(hana::zip(hana::members(a), tuple), [](auto& element) { element[0_c] = element[1_c]; });
}
这是我尝试将每个元组元素分配给 A 的相应(顺序)成员。这不起作用(有关完整错误,请参阅live example)。归结为
main.cpp:19:54: note: candidate function [with $0 = boost::hana::tuple<int, int>] not viable: expects an l-value for 1st argument
hana::for_each(hana::zip(hana::members(a), input), [](auto& element) { element[0_c] = element[1_c]; });
^
我在文档中读到 Hana 算法有 by-value semantics,但是如何去做这种事情呢?从hana::tuple 构造A 是唯一可能的吗?
【问题讨论】:
-
这就是
Algorithms in Hana always return a new container holding the result.的建议...鼓励您使用纯函数并创建新对象,而不是对旧对象执行破坏性更新。 -
@user268396 如果我有一个巨大的结构,里面全是复杂的东西,但我想设置一个成员怎么办?这真的不可能吗?与此同时,我发现
hana::members(a) = input;在编译的意义上也“有效”,但同样,lhs 是成员的副本,所以a永远不会被修改。
标签: c++ c++17 boost-hana