根据参数数量重载宏

2023-11-22

我有两个宏FOO2 and FOO3:

#define FOO2(x,y) ...
#define FOO3(x,y,z) ...

我想定义一个新的宏FOO如下:

#define FOO(x,y) FOO2(x,y)
#define FOO(x,y,z) FOO3(x,y,z)

但这不起作用,因为宏不会超载参数数量。

无需修改FOO2 and FOO3,有什么方法可以定义宏FOO (using __VA_ARGS__或其他)以获得与调度相同的效果FOO(x,y) to FOO2, and FOO(x,y,z) to FOO3?


简单如下:

#define GET_MACRO(_1,_2,_3,NAME,...) NAME
#define FOO(...) GET_MACRO(__VA_ARGS__, FOO3, FOO2)(__VA_ARGS__)

因此,如果您有这些宏,它们将按所述扩展:

FOO(World, !)         // expands to FOO2(World, !)
FOO(foo,bar,baz)      // expands to FOO3(foo,bar,baz)

如果你想要第四个:

#define GET_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define FOO(...) GET_MACRO(__VA_ARGS__, FOO4, FOO3, FOO2)(__VA_ARGS__)

FOO(a,b,c,d)          // expands to FOO4(a,b,c,d)

当然,如果你定义FOO2, FOO3 and FOO4,输出将被定义的宏的输出替换。

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

根据参数数量重载宏 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐

  • 如何正确刷新 UINavigationBar?

    关于这个问题 如何从子视图控制器中更改后退按钮文本 我正在寻找一种在更改后退按钮标题后刷新导航栏的正确方法previousViewController navigationItem backBarButtonItem title New T
  • Google OpenId:找不到 OpenID 端点(间歇性)

    通常使用 Google OpenId 工作正常 每天数千次 然后它会开始间歇性出错并超时一个小时左右 某些请求会验证 但不是全部 反复验证最终会起作用 错误消息是 Event code 200000 Event message No Ope
  • NodeJS中获取Mongo数据库中插入文档的_id

    我使用 NodeJS 在 MongoDB 中插入文档 使用collection insert我可以将文档插入数据库 如下代码所示 collection insert objectToInsert function err if err re
  • 查找 R 列中的最小非零值

    我在R中遇到这种情况 my minimum lt min my data frame my column number 这将返回最小值 我想要的是最小的非零值 我见过很多更复杂的情况 人们想要一个非零最小值的向量 但我只想要一个数字 即存在
  • 是否可以在原始输入中吞下一个密钥?

    我正在使用原始输入API因为我需要能够以不同的方式响应来自不同 USB HID 设备的按键 即使它是相同的按键 我的窗口收到WM INPUT消息正确 我可以检索RAWKEYBOARD结构获取我需要的所有信息 现在我想阻止这些 USB 设备切
  • 在uWSGI中启用内部路由

    我有一个与 uWSGI 一起使用的 Django 应用程序 我的uWSGI配置是 uwsgi http 127 0 0 1 8000 env DJANGO SETTINGS MODULE my django app settings mod
  • 用随机值替换数据框中的 NaN

    我有一个带有 NaN 值的数据框 data train 下面给出了一个示例 republican n y republican n NaN democrat NaN n democrat n y 我想用一些随机值替换所有 NaN 例如 re
  • 如何将NativeActivity的内容视图设置为Java创建的组件

    有没有办法将 NativeActivity 的内容设置为用 Java 创建的组件 例如 FrameLayout ImageView 等 我需要使用 NativeActivity 用于在 Xperia Play 上获取触摸板输入 但我还需要能
  • 使用 GCC C 在 AIX 上处理空指针

    我们有一段用 C 编写的代码 有时不能很好地处理零指针 该代码最初是在 Solaris 上编写的 此类指针会导致分段错误 并不理想 但比继续耕耘要好 我们的经验是 如果您在 AIX 上读取空指针 您将得到 0 如果您使用xlc编译器你可以添
  • 如何进行工人与工人之间的沟通?

    我正在对网络工作者进行实验 想知道他们处理令人尴尬的并行问题的能力如何 因此我实施了康威的生命游戏 比做模糊或其他事情更有趣 但是在这种情况下问题是相同的 目前 我有一名 Web Worker 执行迭代并向 UI 线程发回新的 ImageD
  • 如何在MVC 3中设置图表系列颜色?

    我在用着 System Web Helpers Chart 在我的 MVC3 应用程序中显示图表 var myChart new Chart width 600 height 400 AddTitle Resource Utilizatio
  • OpenSSL RSA:无法加密/解密长度超过 16 字节的消息

    我正在开发一个简单的程序 它使用 OpenSSL 进行基本的 RSA 加密和解密 它对于小消息 这是我的程序的 15 个字节的输出 Generating RSA keypair done Message to encrypt 0123456
  • HttpResponseMessage 和 HttpWebResponse 有什么区别?

    它们似乎都是处理客户响应的不同方式 有关我的问题的更多详细信息 我有一个服务器 当我收到来自客户端的请求时 我想调用第二个服务器并将第二个服务器的响应返回给我的客户端 它们都有相同的目的 HttpWebRequest HttpWebResp
  • 使用本地文件作为set_image文件discord.py

    我知道在discord py中 你可以使set image嵌入图像的 url 但是 我想使用计算机上的本地文件set image而不是图像的 url embed discord Embed title Title description D
  • 如何使用 FFmpeg

    我正在尝试从视频中提取帧 并且我选择了 ffmpeg 如果您知道更好的东西请告诉我 来完成此任务 我已经下载了它的源代码 但不知道如何使用它 我怎样才能编译它 推荐的语言是什么 我了解 Python 和 C 请注意 我的操作系统是 Wind
  • 如何添加自定义属性?

    如何在字段中添加自定义属性联系表 7 没有 JavaScript 例如页面中有这样一个字段
  • HTML5 File API 简单检查文件是否存在

    我有一个临时文件 API 存储 HTML5 但我无法检查文件是否存在 有没有简单的方法可以检查呢 我是否必须实际尝试阅读该文件才能找到答案 周围的搜索没有给我带来任何具体的结果 同步检查会很好 这可能吗 你必须阅读该文件 以下示例基于这个演
  • Android WebView中如何加载本地图片

    我正在尝试将存储在数据库中包含图像的 html 字符串加载到WebView 图像存储在内部存储器中 我给出了对 html 字符串的引用 但它不起作用 有什么帮助吗 String content p Can we have a rotatio
  • window.x 和 x 有什么区别?

    假设 x 是一个从未定义的变量 因此它应该是未定义的 在以下场景中 1 if x do something ReferenceError x is not defined 2 if window x do something worked
  • 根据参数数量重载宏

    我有两个宏FOO2 and FOO3 define FOO2 x y define FOO3 x y z 我想定义一个新的宏FOO如下 define FOO x y FOO2 x y define FOO x y z FOO3 x y z