問題タブ [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.
c++ - テンプレート化された戻りタイプのみを持つ関数テンプレートで、テンプレートの特殊化とenable_ifを混合する
VC2010でコンパイルできない次のコードがあります。
foo()
の最初のバージョンは機能的に同じでtemplate <class C> C foo();
あり、正常にコンパイルされるため、エラーメッセージは誤っているようです。
enable-if'd関数テンプレートと明示的なテンプレートの特殊化を組み合わせて使用する方法はありますか?
c++ - 暗黙の変換演算子で enable_if のようなものを使用できますか?
私は(基本的に完成した)マトリックスクラスを持っています(この記事の後半で)。マトリックスが 1x1 マトリックスの場合、バッキング タイプへの暗黙的な変換が必要です (たとえば、1x1 float マトリックスは float に変換する必要があります)。
特殊化を作成し、Matrix 内のすべてのメソッドを複製せずにそれを行う方法はありますか? (たとえば、std::enable_if
? のようなものを使用します) 基本的に、ROWS == COLS == 1 の場合に限り、暗黙的な変換を有効にしたいと考えています。
c++ - enable_if : テンプレートベースのテンプレートメソッドを複数回継承した場合
テンプレートメソッドを持つテンプレート基本クラスがある場合:
例として、メソッドを単純化します。T == U の場合にのみ「存在」する必要があります。
A がこのクラスの場合:
それから私は私が欲しいものを持っています:
コンパイルしますが、
コンパイルされません : エラー: 'A::f(double&)' の呼び出しに一致する関数がありません これは予期された動作です。
S<double>
次に、 Aも継承しましょう。
次に、次のコードはコンパイルされません。
私はあいまいさがないことを期待しました: のf<int>
ためにのみ存在しますS<int>
コンパイラ エラーでは、このコードがコンパイルされた時点で T は認識されていますが、U (U = U) は認識されていないことがわかります。
説明または「回避策」はありますか?
c++ - テンプレート パラメーターに従ってコンパイル時にクラス構造を配置する
テンプレートパラメータに基づいてメンバー変数を含める/除外することはC++で可能ですか?
次に例を示します。
これらには多くの共通プロパティがあるため、数値を表すクラスを 1 つだけ持つ (追加のテンプレート パラメーターを使用) ことで、コードの重複を防ぐことができます。
私がやりたかったことは次のようなものです
したがって、2 番目のパラメーターが void の場合、imag という名前のメンバーは存在せず、次のようになります。
enable_if を試しましたが、結果が得られませんでした。
これが不可能な場合、これを可能にするハックはありますか?
c++ - クラス テンプレートのメンバー テンプレート関数の enable_if
これは MSVC10 のバグでしょうか?
エラー C2770: 明示的な template_or_generic 引数 "enable_if::type A::t(void)" が無効です。
以下がコンパイルされます。
c++ - enable_if 関数が定義されるべきではない場合に定義されました
実験として、クラス テンプレート パラメーターに基づいて、パラメーターを変更せずに void メンバー関数を作成しようとしています。
ただし、エラー: オーバーロードされた 'MyFunc()' の呼び出しがあいまいです。! を除いてすべてが同じであるため、これらの関数のどちらか一方だけが定義されるべきではありません。それらの1つで?
c++ - SFINAE を使用して、テンプレート化された関数の呼び出しが提供された型のために失敗するかどうかを判断する方法はありますか?
レキシカルキャストが可能な場合にのみ、テンプレートで指定された型にパラメーターをboost::lexical_cast
キャストするために使用するメソッドを提供するために使用しているテンプレート化されたクラスがあります。現在、可能かどうかを確認するために、問題のタイプに対して が定義されているstd::string
かどうかを確認しているだけです。operator>>
これは、私がやっていることを基本的に説明する不自然な例です:
これまでのところ、これは私のコードでは問題なく機能します。レキシカル キャストに失敗するすべての型は最初のバージョンになり、他のすべての型は 2 番目のバージョンになります。少なくとも、コードでこれを使用している型についてはそうです。私が心配しているのは、基本的に、ターゲットの型が InputStreamable である限り、lexical_cast が失敗しないという仮定を立てていることです。lexical_castのブースト ドキュメントenable-if
には、他のいくつかの要件が概説されています。おそらくこれもチェックする必要がありますが、複雑なものを作成してこれらの条件をまとめて使用するのではなくmpl::and_
、SFINAE を使用して直接テストする方法はありますか?指定された型に対してその呼び出しlexical_cast
が失敗し、失敗しない場合にのみ特殊化されたテンプレートと一致するかどうか?
関数または演算子の存在をテストする例を見たことがありますが、特定の型のテンプレート化された関数を呼び出すとエラーが発生するかどうかをテストすることはありません。
c++ - コンパイラ エラー C2766 : boost::disable_if 使用時の「明示的な特殊化; '特殊化' は既に定義されています」
テンプレートクラスを構築しようとしていますFod
static const int value
これには、テンプレート引数のインデックス (S0 の場合は 0、S1 の場合は 1 など) を示すa を持つ内部クラス At が含まれます。まもなく、次の条件を満たす必要があります。
私はboost::disable_if
次のように使用してみました:
しかし、S3 の特殊化を定義し、両方の S2、S3 が同じ型であるaux::EmptyType
場合 (または: S2 の特殊化を定義し、両方の S1、S2 が同じ型である場合) はエラーになります。
問題を解決する方法はありますか?size_t at<S0>()
そして、 0 を与えるメソッドが必要な場合は、 size_t at<S1>()
1 を与える...?
さらに情報が必要な場合はお尋ねください。
c++ - enable_ifによって除外されていないあいまいなテンプレート引数
関係のないメンバーを受け入れる特殊化を(enable_ifを介して)削除することにより、メンバーの「タイプ」に基づいて、オーバーロードされたメンバーの中から適切なメンバーへのポインターを自動的に選択したいと思います。
私は次のコードを持っています:
私はそれが可能なすべての中から正しい機能を選択することを期待しています。問題は、コンパイラが「関数の引数があいまいなため、テンプレートの引数を推測できない」と言っていることです。
enable_ifの使用方法がわからないようです。その場合、コンパイラは、指定された関数が正しいタイプである場合にのみ特殊化を許可するためです...
(可能であれば)C ++ 03ソリューションが必要であることに注意してください。コードは、いくつかの古いコンパイラでコンパイルする必要があります。
前もって感謝します
c++ - std :: enable_if、テンプレートの特殊化と継承
このコードに関するアドバイスについてお聞きしたいと思います。動作しますが、もっとエレガントに書けると思います。これはC++11のコードなので、コンパイルするときは注意してください;)!
ご覧のとおり、 AとCから派生したクラスを処理できるクラステンプレートを作成しようとしています。問題は、クラスEと同様にAとCのどちらかが継承される場合です。実際、私たちはこのようなものを持つこともできます...
...ただし、クラス( Eなど)がAとCのいずれかを継承すると失敗します。
より良いコードのアイデアはありますか?ありがとう