二元操作符重载原语的字符串类
Binary operator-overloading string-class for primitives
我有一个关于std::string类的简单问题。
为什么不为原语重载+以便字符串可以轻松连接?
例如-如果我有一个双精度
double d = 1000.5:
和字符串
std::string s = "my value is ";
我想以一种简单的方式将这个字符串与双精度连接起来
s = s + d;
结果应该是:
my value is 1000.5
这在Java
等语言中很容易实现。public static void main (String[] args) {
double d = 1000.5;
String s = "my Value is ";
s += d;
System.out.println(s);
}
相反,这是一个如何在c++
中完成的示例。int main() {
double d = 1000.5;
std::ostringstream strs;
strs << d;
std::string s = "My value is " + strs.str();
cout << s;
return 0;
}
这并不复杂,但如果允许以"java方式"进行连接,则会简单得多。
你可以很容易地实现它。
template <typename T, typename = typename std::enable_if<std::is_arithmetic<T>::value>::type>
std::string& operator += (std::string& string, const T& number)
{
return string += std::to_string(number);
}
这很容易做到,没有所有的stringstream
业务。使用std::to_string
std::string s = "my value is " + std::to_string(d);
或者对于c++ 11之前的编译器,可以使用boost::lexical_cast
std::string s = "my value is " + boost::lexical_cast<std::string>(d);
格式很快变得复杂-例如,在世界上的某些地方,数字应该看起来像"1000,5"。因此,stringstream
可用于格式化输出,string
仅处理简单的字符串操作,包括字符串连接。
相关文章:
- 如何使用 C++ 中的原语初始化类(如 std::字符串从 const char* 初始化)
- 出于什么目的,可能需要从Boost库中同步原语和容器
- 使用 c++11 的并发原语是否有一个体面的wait_any实现?
- 如何使用编译时常量原语的类型
- 从 JNI 中的原语获取数字的简单方法
- 如何在 Windows 上仅使用事件和联锁原语实现递归锁
- 库在C/C++和其他语言中重现Java原语hashCode逻辑
- 提升::精神(经典)原语与自定义解析器
- 如何从更基本的同步原语中创建多读/单写锁
- boost::asio:"strand"类型的同步原语有什么名称吗?
- Qt同步原语可以与非QThread线程一起使用吗
- std::vector<> 使用 resize() 派生,它不初始化原语和转发construct_back
- 数据结构的线程安全性,在哪里添加同步原语
- 我可以将哪些同步原语与克隆(2)(C/C++)一起使用
- 在使用jni时,如何清理jfloat等原语?
- 使用cgal创建参数化的3D原语
- 按值传递原语
- 将我转换的.obj文件转换为OpenGL原语
- 在SFML顶点数组中组合原语
- 二元操作符重载原语的字符串类