C++ 从可变长度参数列表中提取 std::string

标签 c++ string variadic-functions

大家好!我正在尝试制作一个返回格式化字符串的 sprintf 的简单拷贝,但我遇到了一个小问题......

显然,使用可变长度参数列表您不能传递 std::string 实例。

我已经让解析器正确处理 int、double、float、char、const char*、char*...我还没有让字符串工作。 :\

如果您想知道,这是我得到的编译错误:/root/learncpp/StringFormat/main.cpp:8: warning: cannot pass objects of non-POD type 'struct std::string ' 通过 '...';调用将在运行时中止

我这样做的主要原因是我可以方便地格式化而不必依赖第 3 方库,但仍然不必将“.c_str()”附加到每个字符串我用的实例。

我们将不胜感激。也许有专门为 C++ 制作的可变长度参数列表的不同版本?

编辑:我刚刚意识到,如果您传递一个指向字符串的指针(即使用 & 前缀),它会很好地工作。您所要做的就是取消引用自定义 sprintf 中的字符串指针,同时传递 std::string 的地址!

不过,如果有任何方法可以通过可变长度参数列表直接支持字符串,那将是一件很高兴的事情。谢谢!

最佳答案

不——正如编译器所说,您只能将 POD 类型的对象传递给可变参数函数。

您通常想要做的是首先消除使用可变参数函数,例如使用 iostream 而不是 printf 之类的东西(或 stringstream 而不是 sprintf)。

关于C++ 从可变长度参数列表中提取 std::string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5690901/

相关文章:

c++ - 在 C++ 中挂载 samba 共享

c++ - 可以通过这种方式使用可变参数函数/模板吗?

java - 尴尬的 Var-args 参数

iphone - 如何从格式和 va_list 中获取格式化的 NSString?

c++ - 如何在派生类上具有默认行为而不是重新定义构造函数

C++获取整数而不是浮点值

javascript - SpiderMonkey 对比 JavaScriptCore 对比?

c++ - 计算字符串中偶数偶数元音和辅音的程序

Javascript:检查字符串中匹配的关键字数组

java - 如何将Java中一个字符串的单词与另一个字符串的单词进行比较并在匹配时分隔单词?