c++ - 如何使用boost fusion获取特定元素的成员名称

标签 c++ templates boost member

我正在使用 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/

相关文章:

c++ - 为什么显式声明其中一个特殊成员函数会禁用其他成员函数的生成

c++ - 具有特定类型但没有模板的数据结构

不同类之间非静态函数的C++回调

c++ - ISO-10646 XFont 编码问题

java - Delaunay 三角剖分中没有边的矩形约束

c++ - 无法推断模板参数?

javascript - EJS 模板 .render() 返回函数而不是 HTML

c++ - 如何使用存储在 boost spirit 闭包中的变量作为 boost spirit 循环解析器的输入?

c++ - boost::lexical_cast 编译时出现警告

c++ - Boost dijkstra_shortest_paths 中的自定义图形距离