問題タブ [enable-if]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
434 参照

templates - 「enable_if」で使用する「is_allocator」型の特徴を探す

テンプレートパラメータでアロケータを検出する「十分に」信頼できる方法はありますか? つまり、is_allocatorで使用できる型特性のようなものが必要ですenable_if:

クラス テンプレートfuture (テンプレート パラメータ T を使用)があるとします。

ここで_shared_valueは、std::shared_pointer<T>です。

0 投票する
2 に答える
1320 参照

c++ - クラス テンプレートで boost::enable_if を使用する方法

クラステンプレートの一部の関数をオン/オフするために boost::enable_if を使用しようとしていますが、常にコンパイルエラーerror: no type named "type" in struct boost::enable_if が発生します。

私のスニペット:

ただし、次の同様のコードは正常に機能します。

私が達成したいのは、クラステンプレートで宣言された型に基づいていくつかのメンバー関数を無効/有効にすることです。実際には、テンプレート メンバー関数は必要ありません。SFINAE にのみ追加されます。

誰でも助けてくれますか??

ありがとう!

0 投票する
1 に答える
2611 参照

c++ - メンバー関数を条件付きで含める enable_if

タイプが反復子であるテンプレート化されたクラスがあります。テンプレート パラメーターの iterator_category に応じて、特定のメンバー関数を有効/無効にしたいと考えています。operator--特に、テンプレート パラメーターが双方向イテレーターの場合は有効にしたいと考えています。私の試みはこれでした:

Clangは私に(大まかに)教えてくれます:error: no type named 'type' in 'std::__1::enable_if<false, MyTemplateParameter>'; 'enable_if' cannot be used to disable this declaration

私がしようとしていることを達成する方法はありますか?

いくつかのコンテキストでの例を次に示します。

0 投票する
2 に答える
731 参照

c++ - コンストラクタの単一引数としての std::enable_if

私はテンプレートのメタプログラミングにかなり慣れていないので、いくつかの概念に取り組んできました。

それを読んだとき、1 つ以上の DATATYPES 引数があればデフォルトのコンストラクターが有効になると思っていましたが、それをテストした結果、コンパイル エラーが発生しました。

enable_if が何をすべきかを理解しているので、このスニペットを理解するのに役立つ助けをいただければ幸いです。

編集:これは、「この特定の効果を得るにはどうすればよいか」という問題ではないと思います。さらに、「このコードは実際に何を生成しているのか、元の作成者の意図であると私が理解したものと一致していますか?」という行に沿ってさらに詳しく説明します。

0 投票する
2 に答える
318 参照

c++ - VS .NET 2008 で boost::enable_if を使用してメンバー関数テンプレートを特殊化できない

次のように、2 つの異なるタイプのクラスのメンバー関数テンプレートを特殊化しようとしています。

GCC 4.8.2 はコードをコンパイルしますが、VS .NET 2008 はエラー メッセージを吐き出します。

0 投票する
1 に答える
65 参照

c++ - ブースト enable_if を使用してテンプレート メソッドを一致させることができませんでした

g++4.4.7 を使用していたため、コンパイル エラーが発生しました: error: no match for 'operator&' in 'serializer & tar'</p>

スペシャライゼーションを実現するには?

0 投票する
4 に答える
891 参照

c++ - テンプレート派生クラスでメソッドのオーバーライドを無効にする

T が特定のタイプではない場合、テンプレートの特殊化を記述することなくFoo()、派生クラスでオーバーライドを無効にすることは可能でしょうか(または何らかのブースト マジックを使用) 。std::enable_ifclass Derived

ボーナス ポイント: T が特定のメソッドを定義していない場合、オーバーライドを無効にできますか?

これが私のSSCCEです:

アップデート:

素晴らしい解決策をありがとう、しかし私はそれらを私の実際のコードに適応させることができませんでした. 次の例は、私が達成しようとしていることのより良いアイデアを提供するはずです: