我正在使用 boost fusion 库来读取结构中的所有成员。我相信boost::fusion::extension::struct_member_name<MembersList, Index::value>::call()
已经给出了成员名称。但是有没有一种方法可以在这个结构之外获取名称而不需要将另一个参数传递给 member_value 以外的函数?
template <typename MembersList>
struct Struct
{
Struct(const MembersList& members) : mMembers(members)
{
}
template <typename Index>
void operator() (Index idx) const
{
std::string field_name = boost::fusion::extension::struct_member_name<MembersList, Index::value>::call();
const auto& member_value = boost::fusion::at<Index>(mMembers);
getName(member_value); // function that returns the name of member_value
}
};
假设我们正在处理的结构定义如下,我想要 getName
函数返回“名称”或“值”的字符串。
BOOST_FUSION_DEFINE_STRUCT(
(NameSpace),
Members,
(string, name)
(int, value)
)
编辑:
有没有一种方法可以设置结构以便我可以访问 field_name
外变?也许有类似的东西
template <typename MembersList>
struct Struct
{
std::string field_name;
template <typename Index>
void operator() (Index idx) const
{
field_name = boost::fusion::extension::struct_member_name<MembersList, Index::value>::call();
}
std::string getName(){
return field_name;
}
};
void someFunction() {
std::string name = getName();
}
但格式正确吗?
谢谢!
最佳答案
没有这样的方法
成员对象只是一个对象。一旦你传递它,它就只是一个 int&
或一个 std::string&
。零上下文可以推断它实际上是另一个对象的成员。
当然,如果您知道封闭对象,您可以迭代所有适应 fusion 的成员并将地址与子对象的地址进行比较 member_value
我不确定为什么你想要那个,但你去吧。
关于c++ - 如何使用boost fusion获取特定元素的成员名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161534/