LoginSignup
5
6

More than 5 years have passed since last update.

operator==()が定義してあればoperator!=()を書かなくてもよくするやつ

Posted at

C++でクラスに演算子==をオーバーロード定義してあげても、a != bという比較はできません。演算子!=を別途定義する必要があります。
でもほとんどの場合、!=の働きは==の否定でしょう。それなら共通ヘッダにこんなテンプレートを置いておけば

template<class T, class F = decltype(!(std::declval<T>()==std::declval<T>()))>
// 自動的に定義される!=演算子。==演算子の結果に!演算子を適用した結果を返します。
F operator!=(T a, T b)
{
    return !(a==b);
}

==演算子が定義されていて!=が未定義のすべての型について、!=演算子が自動定義されます。戻り値がboolであるとは限りません。==!の定義次第です。
==演算子の定義はこのテンプレートより前でも後ろでも構いません。
また、自力定義の!=演算子があれば、このテンプレートより前にあっても後ろにあってもそちらが有効なままとなります。

5
6
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6