BOOST.Hana中BOOST\u FUSION\u ADAPT\u ASSOC的等价物是什么?

BOOST.Hana中BOOST\u FUSION\u ADAPT\u ASSOC的等价物是什么?,boost,c++14,boost-fusion,boost-hana,adaptor,Boost,C++14,Boost Fusion,Boost Hana,Adaptor,在过去的好日子里,我们常常将struct改编成Boost.Fusion容器或具有 #include <boost/fusion/adapted/struct/adapt_struct.hpp> #include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp> struct Person{ std::string name; int age; }; BOOST_FUSION_ADAPT_STRUC

在过去的好日子里,我们常常将
struct
改编成Boost.Fusion容器或具有

#include <boost/fusion/adapted/struct/adapt_struct.hpp>
#include <boost/fusion/adapted/struct/adapt_assoc_struct.hpp>

struct Person{
    std::string name;
    int age;
};

BOOST_FUSION_ADAPT_STRUCT(
    Person,
    (std::string, name)
    (int, age)
);

struct tag_name;
struct tag_age;

BOOST_FUSION_ADAPT_ASSOC_STRUCT(
    Person,
    (std::string, name, tag_name)
    (int, age, tag_age));

int main(){}
#包括
#包括
结构人{
std::字符串名;
智力年龄;
};
增强融合适应结构(
人,
(std::字符串,名称)
(国际,年龄)
);
结构标签名称;
结构标签;
增强\融合\自适应\关联\结构(
人,
(标准::字符串、名称、标记和名称)
(int,age,tag_age));
int main(){}
现在有了Boost.Hana,我们也可以适应了

#include <boost/hana/adapt_struct.hpp>
BOOST_HANA_ADAPT_STRUCT(Person, 
    name,
    age
);
#包括
提升结构(人,
名称
年龄
);
问题是:BOOST.HANA中是否有一种
BOOST\u HANA\u ADAPT\u ASSOC\u STRUCT
(相当于
BOOST\u FUSION\u ADAPT\u ASSOC\u STRUCT
)?还是现在的做法有所不同?


额外问题:是否有
BOOST\u HANA\u ADAPT\u TPL

根据BOOST.Fusion的文档,
BOOST\u Fusion\u ADAPT\u ASSOC\u STRUCT
宏生成锅炉板进行建模 随机存取序列和关联序列

在Boost.Hana中,这些额外的宏是不需要的,因为在没有任何锅炉板的情况下,您可以免费获得额外的功能

对于“关联序列”,Boost.Hana具有提供该功能的概念

虽然Boost.Hana没有用于“随机访问序列”的迭代器,但它确实具有Boost.Hana概念中的函数和。 不幸的是,Hana没有实现这些,尽管我相信它可以。也许可以加上这一点

至于
BOOST\u HANA\u ADAPT\u TPL
,BOOST.HANA没有用于简化模板结构的宏,但用户仍然可以实现在没有任何宏的情况下生成模板

您可以使用编译时字符串按名称搜索
boost::hana::Struct
s成员:

#define BOOST_HANA_CONFIG_ENABLE_STRING_UDL
#include <boost/hana.hpp>
#include <string>

namespace hana = boost::hana;
using namespace hana::literals;

struct Person {
  std::string name;
  int age;
};

BOOST_HANA_ADAPT_STRUCT(
  Person,
  name,
  age
);

int main()
{
  Person person{"Joe", 42};

  // hana::Searchable search by key
  hana::at_key(person, "name"_s);
  hana::at_key(person, "age"_s);
}
\define BOOST\u HANA\u CONFIG\u ENABLE\u STRING\u UDL
#包括
#包括
名称空间hana=boost::hana;
使用名称空间hana::文本;
结构人{
std::字符串名;
智力年龄;
};
提升结构(
人,
名称
年龄
);
int main()
{
人{“乔”,42};
//hana::可按键搜索
hana::at_key(人名);
hana::at_key(人称“年龄”);
}