...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

コンセプトの勉強(2)

そして、このコンセプトの要求を満たさなければならないクラス/関数を定義する

template <LessThanComparable T>
const T& min(const T& lhs, const T& rhs)
{
    return lhs < rhs ? lhs : rhs;
}

こうしてもいい(こっちの書き方だと、コンセプトを&&で複数指定できる)

template <class T>
requires LessThanComparable<T>
const T& min(const T& lhs, const T& rhs)
{
    return lhs < rhs ? lhs : rhs;
}
http://d.hatena.ne.jp/faith_and_brave/20071005/1191579496

上の方はclass|typenameがコンセプトになった形だからとてもわかりやすいのだけど,下の書き方はどうも馴染まない.どうしてかというと;

requires LessThanComparable

型Tが持っていなければならないいくつかの特性について言及するのだからTを1回だけ書きたい.

requires T : LessThanComparable

こうすると複数のコンセプトを書きやすいのになと思う.

requires T : LessThanComparable, FooConcept, BarConcept

requires 絡みの他の機能をまだ知らないからこれでも本当に大丈夫なのかはこれから判断する.

追記

template <class T : LessThanComparable, FooConcept, BarConcept>
const T& min(const T& lhs, const T& rhs)
{
    ...
}

これでもいいかな?

追記

そうか.

template <class T, class U>
requires FooConcept<T,U>
void fun(){}

こういうのがあるからか.