Boost Fusion:将适应的结构类型转换为文本

2024-01-06

给定一个像这样的结构:

struct Foo
{
    int x;
    int y;
    double z;
};

BOOST_FUSION_ADAPT_STRUCT(Foo, x, y, z);       

我想生成一个像这样的字符串:

"{ int x; int y; double z; }"

我已经看到如何打印values https://stackoverflow.com/a/17660354/4323Fusion 改编的结构,但在这里我只需要打印类型和名称。

我怎样才能简单地做到这一点?如果有更好的方法的话,我不会选择 Boost.Fusion。


我认为你可以通过对代码进行一些轻微的修改来得到与你想要的类似的东西这个答案 https://stackoverflow.com/a/17842958/2417774。您可以使用以下方式轻松获取会员名称boost::fusion::extension::struct_member_name但是,据我所知,您无法直接获取成员类型名称。您可以使用以下方式获取成员类型boost::fusion::result_of::value_at(以及其他选项),我选择使用 Boost.TypeIndex 来获取其名称(不同程度的美观,具体取决于编译器和相关类型)。所有这些都是假设您实际上需要 Fusion 改编,如果您不需要,您可能会得到一种更简单的方法,只做您需要的事情。

完整代码
在 WandBox (gcc) 上运行 http://melpon.org/wandbox/permlink/garJmgbRY9Do9I9j
在 rextester (vc) 上运行 http://rextester.com/PQL69470

#include <iostream>
#include <string>

#include <boost/mpl/range_c.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/include/zip.hpp>
#include <boost/fusion/include/at_c.hpp>
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/mpl.hpp>

#include <boost/type_index.hpp>


namespace fusion=boost::fusion;
namespace mpl=boost::mpl;

struct Foo
{
    int x;
    int y;
    double z;
};

BOOST_FUSION_ADAPT_STRUCT(Foo, x, y, z);

struct Bar
{
    std::pair<int,int> p;
    std::string s;
};

BOOST_FUSION_ADAPT_STRUCT(Bar, p, s);

template <typename Sequence>
struct Struct_member_printer
{
    Struct_member_printer(const Sequence& seq):seq_(seq){}
    const Sequence& seq_;
    template <typename Index>
    void operator() (Index) const
    {

        std::string member_type = boost::typeindex::type_id<typename fusion::result_of::value_at<Sequence,Index>::type >().pretty_name() ;
        std::string member_name = fusion::extension::struct_member_name<Sequence,Index::value>::call();

        std::cout << member_type << " " << member_name << "; ";
    }
};
template<typename Sequence>
void print_struct(Sequence const& v)
{
    typedef mpl::range_c<unsigned, 0, fusion::result_of::size<Sequence>::value > Indices; 
    std::cout << "{ ";
    fusion::for_each(Indices(), Struct_member_printer<Sequence>(v));
    std::cout << "}\n";
}

int main()
{
    Foo foo;
    print_struct(foo);

    Bar bar;
    print_struct(bar);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Boost Fusion:将适应的结构类型转换为文本 的相关文章

  • 语言混合:模型和视图

    考虑开发一个应用程序 其中模型将使用 C 使用 Boost 编写 视图将使用 Objective C 使用 Cocoa Touch 编写 哪里有一些示例展示了如何集成 C 和 Objective C 来开发 iPhone 应用程序 直接从源
  • ProtoBuf-net AsReference 需要 Activator.CreateInstance 中的公共构造函数吗?

    在我的两门课程中 看起来像这样 最少 using System using System Collections Generic using System Collections using System ComponentModel us
  • 如何将 C++ 类包装在基于 C 的 dll 或基于 CLI 的 dll 中?

    我被告知将我用 C 编写的类导入到 dll 中 然后在 c 应用程序中使用该 dll 下列的本指南 https stackoverflow com questions 4555961 how to use a class in dll我创建
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • C++ - 模板专业化和部分专业化

    我一直在互联网和 stackoverflow 上寻找具体的答案 但我似乎找不到 我必须创建一个通用类 然后实现特定的功能 我的具体说明是 您需要使用模板表达式参数以及模板类专业化和部分专业化 我有一个模板类 template
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • Windows 程序如何临时更改其时区?

    我写了一个函数来返回time t与给定日期的午夜相对应的值 当给定日期没有午夜时 它返回最早可用的时间 例如 当埃及进入夏令时时 这种情况就可能发生 今年 时间更改于 4 月 29 日晚上午夜生效 因此时钟直接从 23 59 转到 01 0
  • 使用正则表达式匹配以“Id”结尾的单词?

    如何组合一个正则表达式来匹配以 Id 结尾的单词并进行区分大小写的匹配 试试这个正则表达式 w Id b w 允许前面的单词字符Id和 b确保Id位于单词末尾 b是字边界断言
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 使用 Microsoft Graph 创建用户

    如何使用 Microsoft graph 创建用户 因为我在保存过程中遇到了权限失败的问题 我确实有几个问题 在图中调用创建用户 API 将在哪里创建用户 是在 Azure AD 还是其他地方 我尝试通过传递 json 和必需的标头来调用创
  • 基于 C++ 范围的 for 循环

    尝试使用基于范围的 for 循环执行某些操作 可以使用常规的 for 循环来完成 如下所示 vector
  • 在非指针变量和类成员上放置 new

    考虑以下示例 include
  • 为什么在 .net 中使用 Invoke on Controls? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 NET不允许跨线程操作 https stackoverflow com questions 2896504 why net does not allow cross thread operat
  • 使用 cudamalloc()。为什么是双指针?

    我目前正在浏览有关的教程示例http code google com p stanford cs193g sp2010 http code google com p stanford cs193g sp2010 学习CUDA 演示的代码 g
  • 从存储过程返回 int 值并在 ASP.NET 代码中检查它以验证登录表单

    当我多次尝试但没有得到有效结果时 使此代码运行的真实顺序是什么 SQL存储过程的代码 set ANSI NULLS ON set QUOTED IDENTIFIER ON GO ALTER PROC dbo login proc usern
  • 打破条件变量死锁

    我遇到这样的情况 线程 1 正在等待条件变量 A 该变量应该由线程 2 唤醒 现在线程 2 正在等待条件变量 B 该变量应该由线程 1 唤醒 在我使用的场景中条件变量 我无法避免这样的死锁情况 我检测到循环 死锁 并终止死锁参与者的线程之一
  • 停止 TcpListener 的正确方法

    我目前正在使用 TcpListener 来处理传入连接 每个连接都有一个线程用于处理通信 然后关闭该单个连接 代码如下 TcpListener listener new TcpListener IPAddress Any Port Syst
  • 计算两个日期之间的工作日数?

    在C 中 如何计算business 或工作日 两个日期之间的天数 我以前曾经遇到过这样的任务 并且我已经找到了解决方案 当可以避免的时候 我会避免列举其间的所有日子 这里就是这种情况 正如我在上面的一个答案中看到的那样 我什至没有提到创建一
  • 请解释为什么Java和C对此代码给出不同的答案

    public class Test public static void main String args int i 10 i i System out println value of i is i 输出是 10 当我在中执行类似的代码
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route

随机推荐

  • WPF线程和GUI如何从不同线程访问对象?

    我有一个线程调用一个从互联网获取一些东西的对象 当该对象填满所需的所有信息时 它会引发一个事件 其中对象将包含所有信息 该事件由启动线程的控制器消耗 然后 从事件返回的对象被添加到通过视图模型方法绑定到 GUI 的集合中 问题是我无法将 C
  • 从另一个jar文件访问资源

    我有一个简单的结构 一个包含一批数据的数据 jar 文件和一个使用数据运行服务的服务 jar 文件 为了使数据易于替换 我将它们分开 并且 service jar 的类路径包含 data jar 所在的目录 在 service jar 中
  • 如何在 gitlab 中为多分支管道 jenkins 添加 webhook

    我想为每次推送触发多分支管道 任何人都可以告诉我如何在 gitlab 中配置 web hooks 来实现多分支管道 如果您想知道触发器设置在多分支管道作业设置中的位置 这将回答它 与其他作业类型不同 多分支作业配置不需要 触发器 设置 只需
  • 如何从 Android 中的 PreferenceActivity 获取 SharedPreferences?

    我正在使用 PreferenceActivity 来显示我的应用程序的一些设置 我通过 xml 文件扩充设置 以便我的 onCreate 和完整的类方法 如下所示 public class FooActivity extends Prefe
  • Yolo 暗网仅检测特定类别,如人、猫、狗等

    我们使用 YOLO Darknet 进行对象检测 我们使用Python3 tensorflow 1 0 numpy opencv 3 使用yolo weight进行检测 根据下面的链接给出 https github com thtrieu
  • 如何忽略文件夹而不将其从我的存储库中删除

    我有 tmp 和 cache 目录 它们不断生成不需要提交的文件 我如何设置它以便 svn 忽略它们 但不删除它们或从存储库中删除它们 站点需要它们才能工作 cd path to app tmp svn propset svn ignore
  • 请求重试之间的超时 Apache HttpClient

    有人可以分享如何配置现代 HttpClient 4 5 3 以重试失败的请求并在每次重试之前等待一段时间吗 到目前为止看来我的理解是正确的 setRetryHandler new DefaultHttpRequestRetryHandler
  • php is_file 总是返回 false

    php is file 总是返回 false apache h185 default ls l home www default p php rwxr xr x 1 zhouhh zhouhh 50837 Aug 28 19 02 home
  • EC2 Amazon Linux AMI MySQL CPU @ 62% 空闲时?

    我在 Amazon Linux AMI 上运行 MySQL 没有任何东西与之相关 没有连接 也没有其他正在运行的使用 MySQL 的应用程序 它完全闲置了 但是 top报告 mysql 使用 62 的 CPU 为什么会发生这种情况以及如何解
  • 在android中创建全局函数

    我想要做的是创建一个具有各种功能的java文件 我想在整个项目中使用它 例如检查互联网连接 然后我想在每个活动上调用该函数 有谁知道这是怎么做到的吗 像这样创建类并在此处添加您的函数 package com mytest import an
  • 傻瓜线程队列

    我认为这是一个非常常见的线程场景 我有 100 份相同的工作需要完成 所有工作都是独立的 其他 我想最多处理 一次 15 个职位 正如每一份工作 完成后 将开始新的工作 直到所有作业完成 如果您假设每个作业完成时都会触发一个事件 我使用的是
  • R 中的 sqlquery 不返回查询中的所有行

    我正在 R 中执行以下命令 dbhandle lt odbcDriverConnect driver SQL Server server serveripaddress database DBName uid sa pwd pwd Fact
  • 获取 Finder 中所选文件的路径

    如何检索 Finder 中所选文件的路径数组 我四处搜索 但只找到了有关 AppleScript 的链接 我也看过NSWorkspace and NSFileManager但我没有找到任何东西 扩展 Bvarious 的 正确 答案 以下是
  • 如何在 Windows 终端中运行可执行文件?

    我想运行一个可执行文件Windows 终端 https github com microsoft terminal 像这样的事情 wt exe myConsoleApp exe 但这只会打开终端本身 让终端成为所有人的默认终端ps1 bat
  • 如何使用Retrofit同时发送图像和文本

    我想使用改造同时发送此 Postdata 和图像文件 PostData and Point public class PostData implements Serializable Expose private String text E
  • Model.find() 不再接受 Mongoose 中的回调

    我目前正在从 Angela Yu 博士的课程中学习 Mongoose 但是由于 mongoose 改变了 find 和其他几个函数的语法 所以它抛出了上述错误 这是 JavaScript 代码 const express require e
  • 使用 iPhone 5 和 Xcode 4.2 的核心图 1.0 - 'CorePlot0' 不包含有效的 pid 编译错误

    我已按照以下安装步骤进行操作应用程序中的核心情节 http code google com p core plot wiki UsingCorePlotInApplications网址 正如主题中所定义的 核心绘图版本是 1 0 已在 Xc
  • 使用 TFS API,如何找到代码审查中的评论?

    我正在尝试找出一种方法来查找有关 TFS2012 中代码审查请求 响应项目的详细信息 我可以通过以下方式查询所有代码审查请求 响应项目 const string TfsUri http mytfsserver 8080 tfs Defaul
  • 通过 TVJS-tvOS 使用 API JSon 调用

    我正在尝试使用 tvOS 并且我有关于处理 json 调用的小问题 我必须通过 API 获取一些数据 假设为了测试我正在调用此链接 http query yahooapis com v1 public yql q select 20item
  • Boost Fusion:将适应的结构类型转换为文本

    给定一个像这样的结构 struct Foo int x int y double z BOOST FUSION ADAPT STRUCT Foo x y z 我想生成一个像这样的字符串 int x int y double z 我已经看到如