从变长参数列表中提取std::string
C++ Extract std::string from a variable-length argument list
大家好!我试图使一个简单的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)。
相关文章:
- 如何从 std::atomic 中提取指针 T<T>?
- 从 std::vector<无符号字符>切片中提取 int?
- 无法从 std::string 中提取C++ Unicode 符号
- std::unordered_map::提取引用/指针失效
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- z3 提取 Seq Int 作为 std::vector<int>
- 使用 C++ std::sregex_token_iterator 提取 HTML 注释
- 如果 std::numeric_limits<float>::is_iec559 为真,这是否意味着我可以以明确定义的方式提取指数和尾数?
- 使用标准库在 c++11 中使用 std::tie 提取嵌套在元组中的元组
- 从 std::set 中提取仅移动类型
- 从 std::string 中提取信息
- 提取 std::initializer_list<T> C++的一部分
- 从 std::copy 和 std::copy_n 中提取输入迭代器
- 为什么将指针指向std ::设置的提取节点是未定义的行为
- 是否可以使用一行代码从 std::cin 中提取格式化输入
- 如何从std ::函数中提取和执行目标
- 从带有位偏移量的std::字符串中按字节提取连续位
- 如何通过Boost Spirit提取STD ::弦对象
- 如何从包含空值的字符数组中提取std::string
- 从变长参数列表中提取std::string