c++ - 如何使用 stringstream 作为 C++ 函数的参数?

标签 c++ string function concatenation stringstream

我一直在寻找用其他基元附加字符串的解决方案,发现 stringstream 是最简单的解决方案。但是,我想简化流程,所以我想制作一个功能来简化它的使用。如果您提出其他连接方法,我需要最终结果为 char*。我使用了一个循环 (i):

std::stringstream ss;
ss << "test" << i;      
char* name = new char[ss.str().size() + 1];//allocate
strcpy(name, ss.str().c_str());//copy and put (char*)c_str in name

所以输出是 something link test1test2test3... 这是我能想到的最合理的解决方案。我试图将它放入一个易于使用的函数中,但遇到了问题。我想做类似的事情:

char* string_to_pointer( char* dest, std::stringstream* _ss ) {
   char* result = new char[_ss->str().size() + 1];
   strcpy(result, _ss->str().c_str());
   return result;
}

然后我可以做类似的事情:

std::stringstream ss;
ss << "test" << i;      
char* name = string_to_pointer( name, &ss );

我是 c++ 的新手,这在语法上似乎是正确的用法,但我遇到了运行时问题,并且欢迎解决如何在不导致 Boost 的情况下以易于使用的函数获得它的解决方案。

最佳答案

像这样的事情怎么样:

#include <string>
#include <sstream>

class ToString {
  std::ostringstream stream;
public:
  template<typename T>
  inline ToString &operator<<(const T&val) {
    stream << val;
    return *this;
  }

  inline operator std::string() const {
    return stream.str();
  } 
};

你可以这样使用它:

std::string str = ToString() << "Test " << 5 << " and " << 4.2;

关于c++ - 如何使用 stringstream 作为 C++ 函数的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658226/

相关文章:

java - 删除 String(java) 中相邻的重复字符,即输入 :aaaabbbccdbbaae output: abcdbae

python - 在Python的类中生成一个数字给我一个奇怪的错误

c++ - 从 JIS X 208 到 UNICODE 的编码转换

java - 替换 Java 源文件中的开始注释

c++ - 错误 LNK2019 : unresolved external symbol C++ in Qt platform

c - 我有两个 char 数组,当它们的大小不同时,程序无法正确读取/写入它们

javascript - JavaScript 中警报函数的意外行为

c++ - 从 C++ 函数返回批量数据的最佳数据类型

c++ - 未安装的包上的 CMake "find_package"命令意外成功

c++ - 两个线程访问的共享队列的临界区代码是什么?