可变参数宏:无法通过“...”传递非平凡可复制类型的对象

2024-01-31

我正在尝试为日志机制编写一个宏。我写了一个可变参数宏,但它不起作用std::string。代码如下所示:

#include <stdio.h>
#include <string>


#define LOG_NOTE(m, ...) printf(m, ##__VA_ARGS__)

int main()
{
    std::string foo = "random string";
    int bar = 5;
    LOG_NOTE("%s %d %s", "Hello World", bar, foo);

    return 0;
}

如果我像下面这样调用宏,我不会收到任何错误。

LOG_NOTE("%s %d %s", "Hello World", bar, "random string");

编译器输出:

在函数“int main()”中:5:49:错误:无法传递对象 不可简单复制的类型 'std::string {aka 类 std::basic_string}' 到 '...' 11:5:注意:在扩展中 宏“LOG_NOTE”


这里的问题不是可变参数宏,而是对printf。看看文档 https://en.cppreference.com/w/cpp/io/c/fprintf: 格式说明符"%s"对应于char*, not std::string. printf只能处理原始内置类型。您可以将调用更改为

LOG_NOTE("%s %d %s", "Hello World", bar, foo.c_str());

解决这个问题。

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

可变参数宏:无法通过“...”传递非平凡可复制类型的对象 的相关文章

  • C# 打印问题(RichTextBox)

    我想打印我的 RichTextBox eintragRichTextBox 的内容 我现在有这个代码 private void druckenPictureBox Click object sender EventArgs e PrintD
  • 使用 CLion 进行 OpenCV Windows 设置

    我想在 Windows 上为 CLion IDE 设置 OpenCV 我尝试使用 OpenCV 3 1 和 2 4 得到相同的结果 我有 Windows 10 64 位 CLion 使用 cygwin 环境 到目前为止我做了什么 1 从Op
  • 为什么 F# 的默认集合是排序的,而 C# 的不是?

    当从 C 世界迁移到 F 最惯用的可能 思维方式时 我发现了这个有趣的差异 在 C 的 OOP mutable 世界中 默认的集合集合似乎是HashSet https learn microsoft com en us dotnet api
  • CSharpRepl emacs 集成?

    我碰巧知道莫诺CSharpRepl http www mono project com CsharpRepl 是否有 emacs csharp 模式使用它在一个窗口中运行 REPL 并像 python 模式一样在另一个窗口中编译 运行 C
  • 如何制作可启动程序?

    所以 这个问题可能看起来很奇怪 但假设我编译了 int main void int x 3 int y 4 int z x y 是否可以让CPU这样运行 如何 例如 这允许我写入监视器吗 如果我没记错的话 内存中有些地方可以写入要显示的内容
  • 使用 LINQ 更新 IEnumerable 对象的简单方法

    假设我有一个这样的业务对象 class Employee public string name public int id public string desgination public int grade List
  • 访问 ascx 文件中的母版页控件

    我有一个母版页文件 其中包含 2 个面板控件中的 2 个菜单 我还使用控件来检查用户是否登录并获取用户类型 根据我想要显示 隐藏面板的类型 控件本身不在母版页中引用 而是通过 CMS 系统动态引用 我想在用户控件中使用findcontrol
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 根据对象变量搜索对象列表

    我有一个对象列表 这些对象具有三个变量 ID 名称和值 这个列表中可能有很多对象 我需要根据ID或Name找到一个对象 并更改值 例子 class objec public string Name public int UID public
  • C#6 中的长字符串插值行

    我发现 虽然字符串插值在应用于现有代码库的字符串 Format 调用时非常好 但考虑到通常首选的列限制 字符串对于单行来说很快就会变得太长 特别是当被插值的表达式很复杂时 使用格式字符串 您将获得一个可以拆分为多行的变量列表 var str
  • 如何从 Rx Subscribe 回调异步函数?

    我想回调 Rx 订阅中的异步函数 例如 像那样 public class Consumer private readonly Service service new Service public ReplaySubject
  • Linux mremap 不释放旧映射?

    我需要一种方法将页面从一个虚拟地址范围复制到另一个虚拟地址范围 而无需实际复制数据 范围很大 延迟很重要 mremap 可以做到这一点 但问题是它也会删除旧的映射 由于我需要在多线程环境中执行此操作 因此我需要旧映射能够同时使用 因此稍后当
  • 选择查询不适用于使用Parameters.AddWithValue 的参数

    C 中的以下查询不起作用 但我看不出问题所在 string Getquery select from user tbl where emp id emp id and birthdate birthdate cmdR Parameters
  • 如何停止无限循环?

    我正在编写一个程序 该程序将计算三角形或正方形的面积 然后提示用户是否希望计算另一个 我的代码已经运行到可以计算任一形状的面积的程度 但随后不再继续执行代码的其余部分 例如 如果选择了正方形 则计算面积 然后返回到正方形边长的提示 我假设这
  • 使用 jQuery 从 ASP.Net JSON 服务获取数据

    我正在尝试调用 Google 地图地理编码 API 从纬度 经度对中获取格式化的地址 然后将其记录到控制台 我正在尝试获取为给定位置返回的第一个 formatted address 项目 我很简单无法从 JSON 中提取该项目 我不知道为什
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • 为什么以下 C 程序会出现总线错误?

    我认为这是第一个失败的 strtok 调用 好久没写C了 有点不知所措 非常感谢 include
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • INotifyPropertyChanged 和 propertyName

    我一直不确定它的含义propertyName实施时INotifyPropertyChanged 所以一般来说你实现INotifyPropertyChanged as public class Data INotifyPropertyChan

随机推荐

  • Fancybox 无法处理来自 Twitter API 的图像

    使用 Fancybox 2 下面的示例可以完美运行 省略其他代码 a class fancybox href https si0 twimg com profile images 2169856486 avatar jpg title so
  • 如何读取 Micronaut 中的应用程序属性?

    我使用指南将 AWS SES API 集成到我的 Micronaut Groovy 应用程序中在 micronaut 中发送邮件 http guides micronaut io micronaut email groovy guide i
  • 在 C++ 构造函数中分配内存的正确方法是什么?

    这是通过分配内存的正确方法new在 C 构造函数中 参数列表中的第一种方式 class Boda int memory public Boda int length memory new int length Boda delete mem
  • 用于左包装字节元素的高效 sse shuffle mask 生成

    使用 sse 优化以下代码的有效方法是什么 uint16 t change1 uint8 t pSrc uint8 t pDest if change1 0x0001 pDest pSrc 0 if change1 0x0002 pDest
  • 如何从保存的 XGBoost 模型获取参数

    我正在尝试使用以下参数训练 XGBoost 模型 xgb params objective binary logistic eval metric auc lambda 0 8 alpha 0 4 max depth 10 max delt
  • 闪亮降级fontawesome 5至4

    我正在做一个与 fontawesome 4 7 非常相关的闪亮项目 它给我们带来了巨大的价值 作为 fontawesome 的免费用户 我认为升级到 5 3 1 没有任何优势 许多免费图标变得更加丑陋 粗糙 并且必须付费购买专业版才能获得类
  • Windows 8 上的 Visual Studio 2008/2010 - 问题?

    我正在寻找有关在 Windows 8 x64 上使用 Visual Studio 2008 和 2010 的问题所提供的任何信息 我已经找到了以下内容article http support microsoft com kb 2735834
  • 结合网格/包 Tkinter

    我知道过去关于网格和包有很多问题 但我只是不明白如何将两者结合起来 因为我在两个方向 行 列 扩展我的 表格 时遇到困难 我希望按钮保持相同的大小 但始终位于窗口底部 然而 我希望通过调整窗口大小来自动扩展 表格 但似乎无法使其工作 将 w
  • iOS 中的 Crashlytics 无法继续执行 Fabric 应用程序中的“构建您的项目”

    我正在为我的 iOS 应用程序安装 Crashlytics 我通过他们的网站链接下载了它 并完成了集成框架 添加运行脚本等的所有步骤 我遇到了问题 因此我删除了框架并决定重新开始并尝试全新安装 但是 Fabric 应用程序更新到了较新的版本
  • 解析推送通知:发生另一个错误

    自从昨晚用 Parse 测试以来 我遇到了一个奇怪的问题 我能够很好地发送推送通知 但现在当我通过在线解析推送通知工具发送推送通知时 我的推送通知都没有被发送 Edited好吧 看来这只是本地环境的问题 当我测试推送通知到通过试飞安装的测试
  • 拥有.apk可以提取其源代码。 Android 应用程序安全吗? [复制]

    这个问题在这里已经有答案了 我开发 Android 应用程序 其中一些代码非常私密和机密 我将加密算法放入我的代码中以提高安全性 但最近我读到 当人们拥有 apk 文件时 他们可以 100 正确地提取 java 源代码Source http
  • 为什么我的 Trie 查找比标准 F# Map 的查找慢?

    所以 我只是从 OCaml 移植了 Trie 不幸的是 就 tryFind 而言 它的运行速度比标准 Map 慢 我不明白这一点 特里树似乎应该更快 F 的代码库是否以某种特殊方式构建 以使它们比用户通常部署的代码更快 这是代码
  • XSD 指定在 XML 中只能使用一次的属性

    拥有一个具有多个属性的复杂类型
  • C++ 复合模板类工厂

    是否可以制作一个复合模板类工厂而无需手动指定所有组合 我的意思是如果我有这些课程 class CompositeBase template lt typename C1 typename C2 typename C3 gt class Co
  • log4net的线程安全

    似乎有一些关于log4net是否线程安全的讨论 共识是框架是线程安全的 但appender不是 需要正确使用才能实现线程安全 有人可以对此进行一些说明 并可能给出以线程安全方式使用 RollingFileAppender 的示例吗 是否需要
  • 如何将多个属性绑定连接成一个

    我有一个 OData 源 它提供的结果行包含first name last name 我想将它们显示在一个表中 其中有一列名为全名 我正在尝试使用 JSView 它似乎比 XML 更简洁 我可以像这样进行 1 1 绑定 var templa
  • 在任何情况下,直接返回结构是一种好的做法吗?

    IMO 所有直接返回结构的代码都可以修改为返回指向结构的指针 什么时候直接返回结构是一种好的做法 怎么修改 返回指向函数内结构体静态实例的指针 从而使函数不可重入 或者通过返回一个指向堆分配结构的指针 调用者必须确保释放该结构并正确执行此操
  • 错误:在ExternalContext 中未找到/login.xhtml 作为资源

    我将 JBoss 7 1 与 JSF 2 1 Prime Faces 一起使用 并不断遇到标题中列出的错误 我已经尝试了这里提出的许多建议 但最终都出现了相同的错误 文件结构为 WEB INF faces login xhtml 我在 we
  • 如何限制Stream按顺序运行,并防止它并行运行?

    我有一个方法返回从自定义分割器生成的流 分离器并不安全 由于分离器并不安全 并且它保持状态 因此我想防止它并行运行 有没有办法prevent并行运行返回的流 我无法找到任何执行此操作的文档或示例 我确实找到了一个sequential 方法上
  • 可变参数宏:无法通过“...”传递非平凡可复制类型的对象

    我正在尝试为日志机制编写一个宏 我写了一个可变参数宏 但它不起作用std string 代码如下所示 include