2016-10-27 9 views
0

したがって、テンプレートの引数の中にOR演算子のようなものが必要です。 私は、次の操作を実行したい:C++テンプレートOR演算子?

つまり
template <typename T, typename F, 
typename = std::enable_if< 
!std::is_same<T, Node>::value> or !std::is_same<F, Node>::value>> 

私はTFテンプレートクラスの一つがNodeないときに存在する機能を必要としています。

しかし、私はコンパイルエラーを表示します。

PS:オリジナルの質問を編集してより明確にしました。

+1

で例の 'A'と 'B'は何ですか? – krzaq

+1

テンプレートはどこですか? – Treycos

+3

...あなたのコンパイラエラーは何ですか? 'a'と' b'が 'bool'に変換できるconstexprの値なら、' aまたはb'が動作するはずです。さもなければそれはしません。 –

答えて

4

あなたはしかし、コメントで述べたように、abは、実行時にのみ知られてconstexpr、ない値でなければなりませんstd::disjunction

std::enable_if<std::disjunction<a, b>::value> 

を使用することができます。

+0

クール! (なぜなら、彼はまだそれを使用することができないので、 "C++ 17以来"と呪われている) – AndyG

+0

@AndyGこのページには、実現可能な段落があります。あなた自身でそれを実装することはあまりにも困難ではありません。 –

+0

@GillBates:しかし、私はそれを自分で実装したくありません。 – AndyG

3

オペレータのようなものが必要な場合は、それを使用してください。

std::enable_if<a || b>::type // <-- why wouldn't this work? 

ここcoliru

関連する問題