2017-11-05 24 views
0

独自のenable_if条件を作成する方法はありますか?ユーザー定義テンプレート制約のみを受け入れるためのユーザー定義テンプレート制約

私はテンプレートクラス:Foo<int, int, int>を持っていて、別のテンプレートクラスを持っています:Template <T> class Barです。

Fooクラスのスペシャライゼーションのいずれかのタイプになるように、Barクラスを制約したいと思います。例えば、Foo<0, 0 ,1>を取ることはできますが、int型を取ることはできません。

ユーザー定義のenable_ifを使用してこの制約を要求する簡潔な方法がありますか?私が考えていないより良い方法はありますか?理想的には、解決策は、比較的コンパクトで、明らかに、おそらくstd :: is_arithmeticの仕方で動作します。

お時間をありがとうございます。

答えて

1

ライブラリの種類を引き出す必要はありません。最も簡単な方法は、古き良き専門次のようになります。

他のタイプとそれをインスタンス化するの不完全なクラス宣言で行き止まりにヒットする一方で、 Foo<...>は専門を選ぶだろうあるタイプで Barをインスタンス化
template <typename> class Bar; 

template<int a, int b, int c> 
class Bar<Foo<a, b, c>> { 
    // Define `Bar` 
}; 

Bar<T>

+0

(申し訳ありませんが、他のアカウントを見つけることができません)この提案をお寄せいただきありがとうございます。Bar > – user7119460

+1

@ user7119460ではなく、バー<0,0, 1>を使用してクラスを呼び出す必要があると思います。 。それでも 'Foo'が期待されます。 – StoryTeller

関連する問題