从变长参数列表中提取std::string

C++ Extract std::string from a variable-length argument list

本文关键字:提取 std string 列表 参数      更新时间:2023-10-16

大家好!我试图使一个简单的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

我这样做的主要原因是,这样我就可以有方便的格式化,而不必依赖第三方库,但仍然不需要追加".c_str()"到每个字符串实例我使用。

对此提供帮助将不胜感激。也许有一个专门为c++设计的不同版本的变长参数列表?

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

尽管如此,如果有任何方法可以直接通过变长参数列表来支持字符串,那就太好了。谢谢!

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

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