如何编写一个以 C++ 代码作为输入的 C++ 代码生成器?

2023-12-22

我们有一个 CORBA 实现,可以为我们自动生成 Java 和 C++ 存根。由于 CORBA 生成的代码很难使用,因此我们需要围绕 CORBA 代码编写包装器/帮助器。所以我们有一个两步代码生成过程(是的,我知道这很糟糕):

CORBA IDL -> 烦人的 CORBA 生成的代码 -> 有用的包装器/辅助函数

使用 Java 的反射,我可以检查 CORBA 生成的代码并使用它来生成其他代码。但是,因为 C++ 没有反射,所以我不确定如何在 C++ 端执行此操作。我应该使用 C++ 解析器吗? C++ 模板?

TLDR:如何使用生成的 C++ 代码作为输入来生成 C++ 代码?


您是否考虑过退后一步,使用 IDL 作为自定义代码生成器的源代码?也许您有一些隐藏了重复、var、ptr 等内容的包装器代码。我们有一个基于 Ruby 的 CORBA IDL 编译器,当前可以生成 Ruby 和 C++ 代码。这可以通过客户生成器进行扩展,请参阅https://www.remedy.nl https://www.remedy.nl对于 RIDL 和 R2CORBA。

另一种选择是查看 IDL 到 C++11 语言映射,更多详细信息请参见https://www.taox11.org https://www.taox11.org。这种新的语言映射更容易使用,并且使用标准类型和 STL 容器来处理。

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

如何编写一个以 C++ 代码作为输入的 C++ 代码生成器? 的相关文章

  • 通过 SocketCAN 进行 boost::asio

    我正在考虑利用升压阿西奥 http www boost org doc libs 1 49 0 doc html boost asio html从a读取数据套接字CAN http en wikipedia org wiki SocketCA
  • 如何在 DataColumn.Expression 中使用 IF/ELSE 或 CASE?

    我有一个包含 1 列的表 状态 我想添加另一列名为 Action 的列 其值如下 如果 Status Yes 则 Action Go 否则 Action Stop 我使用以下代码添加到 操作 列中 但它不起作用 myDataTable Co
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 平滑滚动.net 表单

    您好 我正在 net 中使用表单 并且在运行时动态添加大量链接标签 我将这些链接标签添加到面板并将该面板添加到 winform 当链接标签的数量增加时 表单会显示一个自动滚动条 垂直 现在 当我使用自动滚动向下滚动时 表单在滚动时不会更新其
  • 防止 boost::asio::io_context 在空轮询调用时停止

    此代码调用发布的句柄 boost asio io context ioc boost asio post ioc std cout lt lt lol lt lt std endl ioc poll 而这并没有 boost asio io
  • 根据 N 个值中最小的一个返回不同的结果

    不确定如何使标题更具描述性 所以我只是从一个例子开始 我使用下面的代码位 它从枚举中选择一个方向 具体取决于四个轴中哪一个与给定方向相比形成最小角度 static Direction VectorToDirection Vector2 di
  • 类特定的新删除运算符是否必须声明为静态

    标准中是否要求类特定的 new new delete 和 delete 是静态的 我可以让它们成为非静态成员运算符吗 为什么需要它们是静态的 它们被隐式声明为静态 即使您没有键入 static
  • GCC 和 ld 找不到导出的符号...但它们在那里

    我有一个 C 库和一个 C 应用程序 尝试使用从该库导出的函数和类 该库构建良好 应用程序可以编译 但无法链接 我得到的错误遵循以下形式 app source file cpp text 0x2fdb 对 lib namespace Get
  • 时间:2019-03-17 标签:c#ThreadSafeDeepCopy

    我一直在阅读很多其他问题以及大量谷歌搜索 但我一直无法找到明确的解决方案 根据我读过的一些最佳实践 类的静态方法应该创建线程安全的 并且实例成员应该将线程安全留给消费者 我想为该类实现深度复制方法 该类本身还有其他引用类型成员 有没有什么方
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • Visual Studio Code:如何配置 includePath 以获得更好的 IntelliSense 结果

    我是使用 Visual Studio Code 的完全初学者 我不知道我在做什么 我已经四处搜索 也许还不够 但我找不到像我这样的人如何配置的简单解释c cpp properties json每当我单击带有绿色波浪线下划线的行旁边的黄色灯泡
  • 如何在服务器端按钮点击时关闭当前标签页?

    我尝试在确认后关闭当前选项卡 因此我将以下代码放在确认按钮的末尾 但选项卡没有关闭 string jScript ClientScript RegisterClientScriptBlock this GetType keyClientBl
  • 如何在标准 WPF ListView 中启用 UI 虚拟化

    我正在使用 NET 4 5 VS2012 并且我有一个 ListView 看起来像这样
  • 无法在内存位置找到异常源:cudaError_enum

    我正在尝试确定 Microsoft C 异常的来源 test fft exe 中 0x770ab9bc 处的第一次机会异常 Microsoft C 异常 内存位置 0x016cf234 处的 cudaError enum 我的构建环境是 I
  • 每个租户的唯一用户名和电子邮件

    我正在使用以下代码编写多租户应用程序ASP NET Core 2 1 我想覆盖默认的与用户创建相关的验证机制 目前我无法创建多个具有相同的用户UserName My ApplicationUser模型有一个名为TenantID 我想要实现的
  • 在 EnvDTE 中调试时捕获 VS 局部变量

    是否可以使用 EnvDTE 进行 vsix Visual Studio 扩展来捕获本地和调试窗口使用的调试数据 或者可以通过其他方法吗 我想创建一个自定义的本地窗口 我们可以修改它以根据需要显示一些较重的内容 而无需为高级用户牺牲原始的本地
  • cout 和字符串连接

    我刚刚复习了我的 C 我尝试这样做 include
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map

随机推荐

  • 如何使用 python matplotlib 中的 set_position 方法固定轴位置?

    我认为这很容易 但我搜索了互联网和 matplotlib 用户邮件列表 但无法找到答案 ax2 是图 fig 中 ax 轴内的插入轴 我通过以下方式制作 http matplotlib sourceforge net examples py
  • 上述查询中表空间的用途是什么?

    CREATE TABLE ts pcode tb incase TABLESPACE USERS AS SELECT FROM ts pcode tb 上述查询中表空间的用途是什么 表空间是数据库中数据文件的逻辑组 数据库通常包含至少一个表
  • Dart 使用 RegExp 从 String 中获取轨迹元素

    当我从我们的网站 url 检索数据时 会在其余 api 字段之一中返回此输出 并且我尝试查找是否tracks包含我从下面的内容中获取网址tracks来源是我需要得到 String test div class n div class div
  • symfony assetic 在请求文件时给出 500 错误

    EDITED 我正在使用 assetic 和 symfony2 每次我尝试加载页面时 在请求 JS 和 CSS 文件时 我的浏览器都会收到 500 错误 如果我在地址栏中输入该资源的地址 我就可以成功加载其文件 更奇怪的是 每当 Symfo
  • 如何配置用户上下文/表?

    随着新的 ASP NET MVC 5 预览版发布 如何配置用户上下文 表 在 MVC 4 中 我只使用我自己的 User 类 然后将 WebSecurity 初始化指向它 如下所示 WebSecurity InitializeDatabas
  • Fortran编译器

    我正在 Mac 上开发 Android 应用程序 有谁知道android 的fortran 编译器吗 我打算从 C 例程调用一些 Fortran 例程 然后用 java 类包装 C 例程并使用 JNI 来执行此操作 但是 我无法编译 For
  • 将 lambda 表达式应用于数组元素时出现 ValueError

    目前我在处理 numpy array 4x1 即时遇到错误 1 96113883 3 46144244 5 075857 1 77550086 使用 lambda 函数f lambda x x if x gt 0 else x 0 01 错
  • 通过 C# 代码更改货币

    我使用以下内容来显示金额 String Format 0 C item Amount 这个显示器 9 99 没关系 但是如果我希望应用程序能够控制货币并能够更改货币 该怎么办 9 99 如何通过代码更改货币格式 货币符号由 CultureI
  • haskell 检查用户输入错误

    我在 haskell 中编写应用程序 我想知道这是检查用户输入是否正确的最佳方法 例如当我要求 int 时它是 int 还是当要求格式良好的日期时它是日期 感谢帮助 Use maybeRead 该函数是一个候选函数 包含在 Haskell
  • 在 Windows 上配置 package.json

    我正在尝试在 Windows 上管理 React 项目的配置 它之前在 Mac 上运行 我在用着yarn build 在 的里面package json scripts gt build被配置为 rm rf deployment stati
  • Ruby:将两个哈希合并为一个并连接值

    2 hash h1 s1 gt 2009 7 27 s2 gt 2010 3 6 s3 gt 2009 7 27 h2 s1 gt 12 29 15 s2 gt 10 00 17 s3 gt 12 25 52 我想将两个哈希合并为一个 如下
  • sbt 编译时警告:类型模式 List[String] 中的非变量类型参数 String

    我的 sbt 显示警告消息 non variable type argument String in type pattern List String the underlying of List String is unchecked s
  • Eclipse 意外退出 2022-06 [重复]

    这个问题在这里已经有答案了 我开始学习Java 几天来一直遇到这个错误 我安装了 eclipse 并且运行得很好 第二天 当我尝试打开该应用程序时 它打不开 并且收到一条消息 无法打开应用程序 Eclipse 进而 Eclipse 意外退出
  • Python 和 urllib2:如何使用参数发出 GET 请求

    我正在构建一个 API API 它基本上是内部 REST Web 服务的包装器 Web 应用程序将向该服务发出大量请求 一些Web服务调用需要是GET而不是POST 而是传递参数 是否有一种 最佳实践 方法将字典编码为查询字符串 例如 fo
  • 有选择地从 MySQL 中删除大部分重复的记录

    我有一张桌子 PRICE UPDATE id int 5 auto increment primary unique part number varchar 10 non null price float 10 2 non null 一些p
  • 如何从 SQL Server 导出到 XML

    从 SQL Server 表或视图 导出到 XML 的最简单方法是什么 这就是我到目前为止所做的 执行Sql任务 SELECT FROM Production Product FOR XML AUTO TYPE ROOT Data 结果集
  • F# 编译错误

    我有以下导致编译错误的 F 代码 persistence fs 32 21 错误 FS0072 根据此程序点之前的信息查找不确定类型的对象 在此程序点之前可能需要类型注释来约束对象的类型 这可以使查找得以解决 错误出现在 serialize
  • 正则表达式如何匹配除空行之外的所有行尾?

    如果我有文字 AAAAAA BBBBBB CCCCCC DDDDDD EEEEEE FFFFFF GGGGGG HHHHHH 我想匹配除空行之外的所有行尾并将行尾替换为制表符 s 部分有效 但它也匹配非空行的最后一个字符 不起作用 什么是正
  • GNU 语句表达式的编译器支持

    哪些现代编译器支持 Gnu 语句表达式 C 和 C 语言 我应该在什么版本中使用语句表达式 语句表达式就像 code code retval int b 56 int c int a a sin b a 我已经知道一些这样的编译器 海湾合作
  • 如何编写一个以 C++ 代码作为输入的 C++ 代码生成器?

    我们有一个 CORBA 实现 可以为我们自动生成 Java 和 C 存根 由于 CORBA 生成的代码很难使用 因此我们需要围绕 CORBA 代码编写包装器 帮助器 所以我们有一个两步代码生成过程 是的 我知道这很糟糕 CORBA IDL