コンパイル時に最大2つの定数値が見つかるテンプレートクラスが必要です。このような何か:std :: max、ただしテンプレートパラメータ用
template<enum_t e1, enum_t e2>
struct max_of { static const enum_t value = SOMEHOW_MAX(e1, e2); };
enum_t
が列挙型であり、max_of<x, y>::value
はx
とy
の最大値を同じにする必要があります。だから問題は:SOMEHOW_MAX
の代わりに何を使用するのですか?コンパイル時にテンプレートのパラメータ値を比較することができないので、私はC++ 14の機能を使用することに制限されているので、ただstd::max
にすることはできません。作業を行いますが、はっきりとさえenum_t
値の数が少ないため、むしろ冗長になり
template<>
struct max_of<E_FIRST, E_SECOND> { static const enum_t value = E_SECOND; };
:enum_t
のカーディナリティが適度に小さい場合には、max_of
を実装するための1つの可能な方法は、そのようなテンプレート特殊、経由しています。テンプレートシステムをプログラム的に最大限に活用する方法はありますか?
['std :: max'](http://en.cppreference.com/w/cpp/algorithm/max)の何が問題になりますか?それは 'constexpr'です。 – NathanOliver
C++ 14以降では 'std :: max'を使うことができます – Slava
boostは以下のように見えます:[http://www.boost.org/doc/libs/1_42_0/libs/integer/doc/html /boost_integer/minmax.html] – gcbenison