增强 C++ 函数以除了 std::string 之外还采用 stringstream
enhancing a c++ function to take stringstream in addition to std::string
可能的重复项:
C++ 在<<后使用字符串流作为参数
我有这样的函数
print(const std::string& message);
我怎样才能把它包装在其他地方,这样我就可以使用,比如说
print2("some message"<<object);
这应该在内部调用上述函数。
下面是使用可变参数模板的 C++11 解决方案:
void print(std::string const & message); // your original function as before
void print2(std::istringstream & iss)
{
print(iss.str());
}
template <typename T, typename ...Rest>
void print2(std::istringstream & iss, T && t, Rest &&... rest)
{
iss << std::forward<T>(t);
print2(iss, std::forward<Rest>(rest)...);
}
template <typename ...Args>
void print2(Args &&... args)
{
std::istringstream iss;
print2(iss, std::forward<Args>(args)...);
}
用法:
print2("Some message", x, foo, "text");
具有可变参数数量的接口比在函数调用中笨拙地使用 shift 运算符更整洁、更直接,因为后者需要显式创建一个流对象,然后你需要直接处理流的低级rdbuf
,并且这种方法不会将原始的无参数版本作为特例。
您可以创建一个返回字符串流的模板operator<<
template<class T>
std::stringstream operator<<(const char* c_str, T t)
{
std::stringstream tmp;
tmp << t;
return tmp;
}
然后你需要定义
void print2(std::stringstream sstream)
{
print(sstream.str())
}
您还可以重载原始打印方法,以便您可以同样很好地编写
print("something"<<some_obj);
相关文章:
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 为什么"std::stringstream::stringstream(std::string&&)"不存在?
- 使用Boost Karma替换STD :: stringstream double到STD :: String Conv
- 增强 C++ 函数以除了 std::string 之外还采用 stringstream
- C++ std::stringstream >> std::string 仅存储第一个条目?
- 有没有办法将std::string移动到std::stringstream中
- 左操作数的类型为 'std::stringstream (__cdecl *)(std::string)'
- 将std::stringstream中的std::string引用作为参数传递
- 使用 stringstream.fail() 检查输入是 int 还是 string
- 为什么stringstream::str()截断string
- c++ stringstream to ostream to string
- Custom Stringstream - Convert std::wstring & std::string
- 使用stringstream时,c++ float到string转换失败
- C++ stringstream string to function(test, char *test2)
- 使用Stringstream将String转换为Int
- 从std::stringstream中提取整个std::string
- 从C++/CLI代码中的std::stringstream读取std::string时出现问题
- std::string运算符+与stringstream的性能
- 对std::string和stringstream使用zlib
- std::stringstream与std::string用于连接多个字符串