赞
踩
在用C++进行编码的时候,有时候需要经常用到字符串+数值,但是C++又不内置这种计算,这个时候就需要我们自己重载运算符+来实现上述功能。
C++的运算符重载有两种方式,一种是在类内重载,另外一种则是在类外。类内重载时可以直接访问类中所有数据成员,而在类外,除非是友元重载,否则只能访问到公有成员,而我们今天的主角string的情况就属于后者。
用过string的同学应该知道,string可以直接+string、char*、char,但是不能加int、double等,所以我们在重载的时候只要把int、double等转换为string就可以直接相加了。。
#include<string>
#include<type_traits>
using namespace std;
//string + num
template<typename _Ty>
typename enable_if_t< is_integral_v<_Ty> || is_floating_point_v<_Ty>, string >
operator +(const string& str, const _Ty& num)
{
return str + to_string(num);
}
// num + string
template<typename _Ty>
typename enable_if_t< is_integral_v<_Ty> || is_floating_point_v<_Ty>, string >
operator +(const _Ty& num, const string& str)
{
return to_string(num) + str;
}
#include<string> #include<type_traits> #include<iostream> //仅用了cout using namespace std; template<typename _Ty> typename enable_if_t< is_integral_v<_Ty> || is_floating_point_v<_Ty>, string > operator +(const string& str, const _Ty& num) { return str + to_string(num); } template<typename _Ty> typename enable_if_t< is_integral_v<_Ty> || is_floating_point_v<_Ty>, string > operator +(const _Ty& num, const string& str) { return to_string(num) + str; } int main() { string str = "Today is "; str = str + 2021 + '.' + 3 + "." + 30; cout << str << endl; system("pause"); }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。