渡されたテンプレートパラメータがFooの子であるという制限を適用したいとします。
タイプ特性を介してこれを実施する方法はありますか?コンパイル時のstatic_assert
失敗は素晴らしいでしょう。
以下のコードでは、2つの部分からなる(個別の)質問にしましょう。
My_Limited_Template<Bar>
コンパイルのみを許可します。My_Limited_Template<TBar>
コンパイルのみを許可します。
編集
私は悪い命名をお詫びします:TBar
そしてTBaz
意図的に非テンプレートクラスであることを意味します。パート1のクラスから明確にするために、名前の前にTを付けました。
コード
struct Foo { }; // no
struct Bar : public Foo { }; // yes
struct Baz { }; // no
template< typename T >
struct TFoo { }; // no
struct TBar : public TFoo<TBar> { }; // yes
struct TBaz { }; // no
template< typename T >
struct My_Limited_Template
{
// Part One:
// My_Limited_Template<Foo> // disallow
// My_Limited_Template<Bar> // allow
// My_Limited_Template<Baz> // disallow
//
// Part Two:
// My_Limited_Template<TFoo<int>> // disallow
// My_Limited_Template<TBar> // allow
// My_Limited_Template<TBaz> // disallow
};