Boost.Hana 中的 BOOST_FUSION_ADAPT_ASSOC 相当于什么?
What is the equivalent of BOOST_FUSION_ADAPT_ASSOC in Boost.Hana?
在过去的美好时光里,我们曾经将 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(){}
现在 Boost.Hana 我们也可以适应
#include <boost/hana/adapt_struct.hpp>
BOOST_HANA_ADAPT_STRUCT(Person,
name,
age
);
问题:Boost.Hana中是否有一种BOOST_HANA_ADAPT_ASSOC_STRUCT
(相当于BOOST_FUSION_ADAPT_ASSOC_STRUCT
)?或者现在的做法有所不同?
奖金问题:是否有BOOST_HANA_ADAPT_TPL
?
根据 Boost.Fusion 的文档,BOOST_FUSION_ADAPT_ASSOC_STRUCT
宏生成用于建模的样板
随机访问序列和关联序列。
有了 Boost.Hana,就不需要这些额外的宏了,因为您可以免费获得额外的功能,而无需任何样板。
对于"Associative Sequence",Boost.Hana具有Searchable
concept that provides the at_key
功能。
虽然 Boost.Hana 没有 "Random Access Sequence" 的迭代器,但它确实有函数 at
and at_c
in Boost.Hana's Iterable
的概念。
不幸的是 Boost.Hana 的 Struct
没有实现这些,尽管我相信它可以。也许可以添加。
至于BOOST_HANA_ADAPT_TPL
,Boost.Hana没有方便模板结构的宏,但用户仍然可以实现hana::accessors
来制作Struct
没有任何宏。
您可以使用编译时字符串按名称搜索 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);
}
在过去的美好时光里,我们曾经将 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(){}
现在 Boost.Hana 我们也可以适应
#include <boost/hana/adapt_struct.hpp>
BOOST_HANA_ADAPT_STRUCT(Person,
name,
age
);
问题:Boost.Hana中是否有一种BOOST_HANA_ADAPT_ASSOC_STRUCT
(相当于BOOST_FUSION_ADAPT_ASSOC_STRUCT
)?或者现在的做法有所不同?
奖金问题:是否有BOOST_HANA_ADAPT_TPL
?
根据 Boost.Fusion 的文档,BOOST_FUSION_ADAPT_ASSOC_STRUCT
宏生成用于建模的样板
随机访问序列和关联序列。
有了 Boost.Hana,就不需要这些额外的宏了,因为您可以免费获得额外的功能,而无需任何样板。
对于"Associative Sequence",Boost.Hana具有Searchable
concept that provides the at_key
功能。
虽然 Boost.Hana 没有 "Random Access Sequence" 的迭代器,但它确实有函数 at
and at_c
in Boost.Hana's Iterable
的概念。
不幸的是 Boost.Hana 的 Struct
没有实现这些,尽管我相信它可以。也许可以添加。
至于BOOST_HANA_ADAPT_TPL
,Boost.Hana没有方便模板结构的宏,但用户仍然可以实现hana::accessors
来制作Struct
没有任何宏。
您可以使用编译时字符串按名称搜索 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);
}