渡されたテンプレートパラメータがFooの子であるという制限を適用したいとします。テンプレートパラメータの子X制限を強制する方法はありますか?
これを型特質によって強制する方法はありますか?コンパイル時にstatic_assert
のエラーが発生する可能性があります。
以下のコードでは、それを2つの(別々の)質問にしましょう。
My_Limited_Template<Bar>
のみをコンパイルできます。My_Limited_Template<TBar>
のみをコンパイルできます。
EDIT私が悪いの命名をお詫び申し上げます :TBar
とTBaz
を目的に非テンプレートクラスであることを意味しています。私はちょうど1
パートのクラスから明確にするために名前の前にTを添付CODE
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
};
したがって、2番目の部分は*「TFooからCRTPを使用して派生したパラメータのみ」*ですか? – jrok
@jrok +1もしあなたがCRTPを含むことができれば、それはもっと良いだろうが、それが可能かどうかわからない! – kfmfe04
私が意味していたのは、あなたがTBarを派生させるときにCRTPを使用したことです。それはあなたが許可したい 'TFoo'子どもの唯一の種類ですか、' struct X:TFoo {}; 'のようなものを持っていていいですか? –
jrok