問題タブ [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 投票する
1 に答える
118 参照

templates - 渡された型が対応する関数かどうかをチェックするかどうかを有効にしますか?

次のコードを検討してください。

提供された機能を実行します。

SFINAE を使用するために、関数が次の条件を満たすかどうかを確認したいと思います。

  • に変換可能な1つのパラメーターを取りますconst unsigned int
  • に変換可能なものを返しますstd::string

の代わりに何を書く必要があり/*SOMETHING*/ますか?

0 投票する
0 に答える
30 参照

templates - unique_ptr デリータでポインターのようなオプションの特性 typedef を使用してテンプレート クラスを作成できるようにするルールは何ですか?

*unique_ptr*typedef foo_type pointer;がデリータでオプションを管理する方法には驚きました。私はビジュアルスタジオ2012の実装を見て、例のために小さな実装を取り除きました:

さて、これを書くことができれば: struct A { typedef unsigned int Type; }; 構造体 B { };

驚くべきことは、MyFn内部で B を使用する場合の不正な形式です。存在しないためですResolveTypetypename B::Type

3 つの質問があります。2.これが正しい標準的な行動である場合、その黒魔術の背後にあるルールは何ですか? 3.これは *enable_if* と関係がありますか?関数のオーバーロードの拒否を許可する方法のロジックを理解するのが難しいため、署名を無効にすることで上記の例と少し同じように?

ありがとう。

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

c++ - C++ でグローバル operator<< の存在を確認します

こんにちは、to_string メンバー関数の 2 つの実装を次のように書きたいと思います。

私はこれを見ましたが、コードの使用方法がわかりません。enable_if と mpl のブーストにはまったく慣れていません。2 つ目の to_string 関数をフォールバックとして使用するには、2 つの to_string 関数をどのように定義すればよいですか?

ありがとう。

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

c++ - std::enable_if の 2 番目のパラメーターの使用は何ですか?

std::enable_if の 2 番目のパラメーターについて混乱しています。int の戻り値の型を使用する場合、次を使用して作成できます。

しかし、パラメーターまたはテンプレートで enable_if を使用するにはどうすればよいですか? この場合、以下の関数の違いは何ですか:

ありがとう。

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

c++ - std::enable_if を使用して可変引数コンストラクタを条件付きで選択する方法は?

他のクラスからコンストラクターを継承する必要があるクラスを作成しようとしていますが、それらのクラス自体から継承する必要はありません。

クラスの初期化中のある時点で、完全転送を使用して、コンストラクターが指定された引数と一致する型のオブジェクトを作成したいと考えています。

引数のないデフォルトのコンストラクターを除いて、あいまいさはありません。

これは私のコードです:

私は多くのことを試しましたが、うまくいきません。

  • 現在のアプローチenable_ifでは、テンプレート引数を自動的に差し引くことができません(私は思う)
  • コンストラクターを使用enable_ifしているため、戻り値には使用できません
  • コンストラクターが可変長であるため、別のデフォルトパラメーターを追加しても機能しenable_ifません
  • 関数の引数から削除するとenable_if、コンパイラは無効なオーバーロードについて不平を言います(もちろん)

この問題を解決するエレガントな方法はありますか?

編集: 標準で許可されている1つの暗黙的な変換は、私のクラスでは発生しないはずです。[コード例を編集]

上記の例で機能する 1 つの解決策は、単一の可変引数コンストラクターを定義し、引数を条件付き初期化関数に完全転送することです。ただし、メンバーはデフォルトで構築される必要があり、これは他の場合には機能しない可能性があるため、このオーバーヘッドを回避したいと思います。

(物事をより明確にすることができる場合は、自由に質問を編集してください)

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

c++ - タイプに指定された名前とタイプの静的変数が含まれている場合の enable_if 関数

タイトルに記載されていることを実行しようとしています。

しかし、それはコンパイルに失敗します:

enable_if が失敗した場合、デフォルトで最初の実装にすべきではありませんか? ここで何が欠けているのか、誰かが何が間違っているのか、そしておそらく解決策を教えてください。(問題はこの単純な decltype(T::_Foo) にあると感じています)