#include <iostream>
#include <string>
#include "boost/operators.hpp"
using namespace std;
class simple_string : private boost::addable1<simple_string,
boost::addable2<simple_string, const char*> >
{
public:
simple_string() : m_str("Default")
{}
explicit simple_string(const char* s) : m_str(s)
{}
simple_string(const simple_string& rhs) : m_str(rhs.m_str)
{}
simple_string operator+=(const simple_string& rhs)
{
m_str += rhs.m_str;
return *this;
}
simple_string operator+=(const char* rhs)
{
this->operator+=(simple_string(rhs));
return *this;
}
friend ostream& operator<<(ostream& os, const simple_string& si)
{
os << si.m_str;
return os;
}
private:
string m_str;
};
int main(void)
{
simple_string s1;
simple_string s2(s1);
cout << "[before] s2: " << s2 << endl;
s2 += s1;
cout << "s2 += s1: " << s2 << endl;
simple_string s3 = s1 + s2;
cout << "s3: " << s3 << endl;
simple_string s4 = s3 + "Why";
simple_string s5 = "Now" + s3;
cout << "s4: " << s4 << endl;
cout << "s5: " << s5 << endl;
cout << "Now" + simple_string() << endl;
return 0;
}
~/Documents/C++/boost $ g++ -o p123 p123.cpp
~/Documents/C++/boost $ ./p123
[before] s2: Default
s2 += s1: DefaultDefault
s3: DefaultDefaultDefault
s4: DefaultDefaultDefaultWhy
s5: DefaultDefaultDefaultNow
DefaultNow
~/Documents/C++/boost $
問題>爲什麼產生operator+(const char*, const simple_string&)
不不返回正確的結果?
例如,對於s5
預期的結果應該是s5: NowDefaultDefaultDefault
和"Now" + simple_string()
的結果應該是NowDefault
這是我的意見在閱讀文檔並同意你的回答後,簡單地實現你想要的這些非交換案例的操作員會更容易和更清楚,儘管這並沒有真正回答這個問題。 – lefticus