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

时间:2011-04-17 01:40:47

标签: 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' through '...'; call will abort at runtime

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

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

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

不过,看看是否有任何方法可以直接通过可变长度参数列表来支持字符串会很高兴。谢谢!

1 个答案:

答案 0 :(得分:3)

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

您通常想要做的是首先使用可变参数函数,例如使用iostream而不是printf(或字符串流而不是sprintf)。