2016-04-07 4 views
1

私はthis questionの答えがそれほど難しくない、つまりコンパイル時に、テンプレートパラメータが数字のリストに入っているかどうかを調べています。関数の範囲を調べるだけでなく、コンパイル時に整数が整数の任意のリストにあるかどうかを確認したいと思います。その答えの著者は、 "C++ 0xがconstexpr、static_assert、およびユーザー定義のリテラルで外に出るとはるかに簡単になるでしょう"と書いていますが、はちょうどとはありません。boost :: mpl :: containsを静的なvector_cに使用することはできますか?

私はthis boost::mpl::contains関数(またはそれが呼び出されたもの)を使用すると考えましたが、2番目のパラメータとして型を取るだけです。ちょうどそれの楽しみのため

+0

'vector_c'は同様のタイプを保持します。あなたが何を求めているのか不明です。 – SergeyA

+0

この質問は、あなたが 'vector_c'に' contains'を入れることができるかどうかの問題と関係していますか?問題はちょうど:そのようなシーケンスに 'contains'をどうやって使うのですか? – Barry

+0

申し訳ありませんが、言葉の悪い選択。私がしたいのは、コンパイル時にテンプレートパラメータが数値のリストにあるかどうかをチェックすることです。 –

答えて

2

template <int first, int... last> 
struct int_list { 
    static bool constexpr check(int c) { 
     return first == c ? true : int_list<last...>::check(c); 
    } 
}; 

template <int first> 
struct int_list<first> { 
    static bool constexpr check(int c) { return c == first; } 
}; 

using my_sequence = int_list<1, 5, 12, 45, 76, 60>; 

static_assert(my_sequence::check(10), "No tenner"); 
+0

[ここには3つのテナーがあります](https://www.youtube.com/watch?v=ERD4CbBDNI0) – user4581301

+0

@ user4581301 – SergeyA

関連する問題