根据参数数量重载宏

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(使用前将#替换为@)

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

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • Cygwin 下使用 CMake 编译库

    我一直在尝试使用 CMake 来编译 TinyXML 作为一种迷你项目 尝试学习 CMake 作为补充 我试图将其编译成动态库并自行安装 以便它可以工作 到目前为止 我已经设法编译和安装它 但它编译成 dll 和 dll a 让它工作的唯一
  • 使用 Microsoft Graph API 订阅 Outlook 推送通知时出现 400 错误请求错误

    我正在尝试使用 Microsoft Graph API 创建订阅以通过推送通知获取 Outlook 电子邮件 mentions 我在用本文档 https learn microsoft com en us graph api subscri
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 写入和读取文本文件 - C# Windows 通用平台应用程序 Windows 10

    有用 但在显示任何内容之前 您必须在文本框中输入内容 我想那是因为我使用了 TextChanged 事件处理程序 如果我希望它在没有用户交互的情况下显示文本文件的内容 我应该使用哪个事件处理程序 因此 我想在按下按钮时将一些数据写入 C W
  • 基于范围的 for 循环中的未命名循环变量?

    有没有什么方法可以不在基于范围的 for 循环中 使用 循环变量 同时也避免编译器发出有关未使用它的警告 对于上下文 我正在尝试执行以下操作 我启用了 将警告视为错误 并且我不想进行像通过在某处毫无意义地提及变量来强制 使用 变量这样的黑客
  • 为什么模板不能位于外部“C”块内?

    这是一个后续问题一个答案 https stackoverflow com questions 4866433 is it possible to typedef a pointer to extern c function type wit
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 在 URL 中发送之前对特殊字符进行百分比编码

    我需要传递特殊字符 如 等 Facebook Twitter 和此类社交网站的 URL 为此 我将这些字符替换为 URL 转义码 return valToEncode Replace 21 Replace 23 Replace 24 Rep
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • ListDictionary 类是否有通用替代方案?

    我正在查看一些示例代码 其中他们使用了ListDictionary对象来存储少量数据 大约 5 10 个对象左右 但这个数字可能会随着时间的推移而改变 我使用此类的唯一问题是 与我所做的其他所有事情不同 它不是通用的 这意味着 如果我在这里
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 如何正确刷新 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