【发布时间】:2016-02-02 18:51:22
【问题描述】:
我正在使用 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();
}
但是格式正确吗?
谢谢!
【问题讨论】:
标签: c++ templates boost member