Как правило, вы НЕ ДОЛЖНЫ ДЕЛАТЬ ЭТОГО в реальном коде.
Поскольку использование полностью отличается от того, что ожидают другие люди.Неожиданные вещи не интуитивны, и неинтуитивен делает трудным для поддержки (или понимания) код для кого-то, кто не знаком с базой кода.
Но в качестве академического упражнения.
Вам нужно, чтобы оператор == возвратил объект, чтобы, если он использовался в другом тесте, он выполнял тест, но если его просто оставили в логическом контексте, он автоматически конвертировался в bool.
#include <iostream>
using namespace std;
template<typename T>
class Test
{
public:
Test(T const& v, bool s)
:value(v)
,state(s)
{}
Test operator==(T const& rhs) const
{
return Test<T>(value, state && value == rhs);
}
operator bool() const
{
return state;
}
private:
T const& value;
bool state;
};
class A
{
int a;
public:
A(int x) { a = x; }
Test<A> operator==(const A& obRight) const
{
return Test<A>(*this, a == obRight.a);
}
};
int main()
{
A ob(10), ob2(10), ob3(14);
if(ob == ob2) // This equality comparison compiles fine.
cout<<"Equal"<<endl;
if(ob == ob2 == ob3)
cout<<"Equal"<<endl;
}