什么是灵活组成字符串的简洁方法?我不想使用宏.
例如,我可能想要将int转换为十六进制格式的字符串,填充宽度为10个字符,连接到字符串,另一个数字,...
基本上,我想要ostringstream/printf的灵活性,但需要一行代码.
我以前用过这样的东西:
#include <sstream>
class make_string
{
public:
make_string() { }
template <typename T>
explicit make_string(T && rhs)
{
oss << rhs;
}
template <typename T>
make_string &operator<<(T && rhs)
{
oss << rhs;
return *this;
}
operator std::string() const
{
return oss.str();
}
std::string str() const
{
return oss.str();
}
private:
std::ostringstream oss;
};
Run Code Online (Sandbox Code Playgroud)
用法是这样的:
string s = make_string() << "Hello, world" << '!' << 42 << 1.0;
Run Code Online (Sandbox Code Playgroud)
或者像这样:
string s = make_string(4.0);
Run Code Online (Sandbox Code Playgroud)
如果您愿意,它可以灵活地在一个表达式中流式传输多个对象,或者如果您需要,可以立即转换单个类型.它将隐式转换为a std::string,因此您可以将其直接分配给一个.它需要的是你的类型T有一个std::ostream对象的流插入操作符.
或者(如上面的评论者所建议的),如果您已经在项目中使用Boost,那么这boost::lexical_cast()是另一个潜在的选择.您应该查看其界面并选择您最喜欢的界面.
| 归档时间: |
|
| 查看次数: |
82 次 |
| 最近记录: |