【发布时间】:2011-04-17 01:40:47
【问题描述】:
大家好!我正在尝试制作一个简单的 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' through '...'; call will abort at runtime
我这样做的主要原因是我可以方便地进行格式化,而不必依赖 3rd 方库,但仍然不必将“.c_str()”附加到 every 字符串我使用的实例。
我们将不胜感激。也许有专门为 C++ 制作的不同版本的可变长度参数列表?
编辑:我刚刚意识到,如果您将指针传递给字符串(即使用 & 前缀),它会很好地工作。您所要做的就是取消引用自定义 sprintf 中的字符串指针,同时传递 std::string 的地址!
不过,如果有任何方法可以直接通过可变长度参数列表来支持字符串,那就太好了。谢谢!
【问题讨论】:
标签: c++ string variadic-functions