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

c++ - テンプレート化された戻りタイプのみを持つ関数テンプレートで、テンプレートの特殊化とenable_ifを混合する

VC2010でコンパイルできない次のコードがあります。

foo()の最初のバージョンは機能的に同じでtemplate <class C> C foo();あり、正常にコンパイルされるため、エラーメッセージは誤っているようです。

enable-if'd関数テンプレートと明示的なテンプレートの特殊化を組み合わせて使用​​する方法はありますか?

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

c++ - 暗黙の変換演算子で enable_if のようなものを使用できますか?

私は(基本的に完成した)マトリックスクラスを持っています(この記事の後半で)。マトリックスが 1x1 マトリックスの場合、バッキング タイプへの暗黙的な変換が必要です (たとえば、1x1 float マトリックスは float に変換する必要があります)。

特殊化を作成し、Matrix 内のすべてのメソッドを複製せずにそれを行う方法はありますか? (たとえば、std::enable_if? のようなものを使用します) 基本的に、ROWS == COLS == 1 の場合に限り、暗黙的な変換を有効にしたいと考えています。

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

c++ - enable_if : テンプレートベースのテンプレートメソッドを複数回継承した場合

テンプレートメソッドを持つテンプレート基本クラスがある場合:

例として、メソッドを単純化します。T == U の場合にのみ「存在」する必要があります。

A がこのクラスの場合:

それから私は私が欲しいものを持っています:

コンパイルしますが、

コンパイルされません : エラー: 'A::f(double&)' の呼び出しに一致する関数がありません これは予期された動作です。

S<double>次に、 Aも継承しましょう。

次に、次のコードはコンパイルされません。

私はあいまいさがないことを期待しました: のf<int>ためにのみ存在しますS<int>

コンパイラ エラーでは、このコードがコンパイルされた時点で T は認識されていますが、U (U = U) は認識されていないことがわかります。

説明または「回避策」はありますか?

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

c++ - テンプレート パラメーターに従ってコンパイル時にクラス構造を配置する

テンプレートパラメータに基づいてメンバー変数を含める/除外することはC++で可能ですか?

次に例を示します。

これらには多くの共通プロパティがあるため、数値を表すクラスを 1 つだけ持つ (追加のテンプレート パラメーターを使用) ことで、コードの重複を防ぐことができます。

私がやりたかったことは次のようなものです

したがって、2 番目のパラメーターが void の場合、imag という名前のメンバーは存在せず、次のようになります。

enable_if を試しましたが、結果が得られませんでした。

これが不可能な場合、これを可能にするハックはありますか?

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

c++ - クラス テンプレートのメンバー テンプレート関数の enable_if

これは MSVC10 のバグでしょうか?

エラー C2770: 明示的な template_or_generic 引数 "enable_if::type A::t(void)" が無効です。

以下がコンパイルされます。

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

c++ - enable_if 関数が定義されるべきではない場合に定義されました

実験として、クラス テンプレート パラメーターに基づいて、パラメーターを変更せずに void メンバー関数を作成しようとしています。

ただし、エラー: オーバーロードされた 'MyFunc()' の呼び出しがあいまいです。! を除いてすべてが同じであるため、これらの関数のどちらか一方だけが定義されるべきではありません。それらの1つで?

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

c++ - SFINAE を使用して、テンプレート化された関数の呼び出しが提供された型のために失敗するかどうかを判断する方法はありますか?

レキシカルキャストが可能な場合にのみ、テンプレートで指定された型にパラメーターをboost::lexical_castキャストするために使用するメソッドを提供するために使用しているテンプレート化されたクラスがあります。現在、可能かどうかを確認するために、問題のタイプに対して が定義されているstd::stringかどうかを確認しているだけです。operator>>これは、私がやっていることを基本的に説明する不自然な例です:

これまでのところ、これは私のコードでは問題なく機能します。レキシカル キャストに失敗するすべての型は最初のバージョンになり、他のすべての型は 2 番目のバージョンになります。少なくとも、コードでこれを使用している型についてはそうです。私が心配しているのは、基本的に、ターゲットの型が InputStreamable である限り、lexical_cast が失敗しないという仮定を立てていることです。lexical_castのブースト ドキュメントenable-ifには、他のいくつかの要件が概説されています。おそらくこれもチェックする必要がありますが、複雑なものを作成してこれらの条件をまとめて使用するのではなくmpl::and_、SFINAE を使用して直接テストする方法はありますか?指定された型に対してその呼び出しlexical_castが失敗し、失敗しない場合にのみ特殊化されたテンプレートと一致するかどうか?

関数または演算子の存在をテストする例を見たことがありますが、特定の型のテンプレート化された関数を呼び出すとエラーが発生するかどうかをテストすることはありません。

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

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 を与える...?

さらに情報が必要な場合はお尋ねください。

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

c++ - enable_ifによって除外されていないあいまいなテンプレート引数

関係のないメンバーを受け入れる特殊化を(enable_ifを介して)削除することにより、メンバーの「タイプ」に基づいて、オーバーロードされたメンバーの中から適切なメンバーへのポインターを自動的に選択したいと思います。

私は次のコードを持っています:

私はそれが可能なすべての中から正しい機能を選択することを期待しています。問題は、コンパイラが「関数の引数があいまいなため、テンプレートの引数を推測できない」と言っていることです。

enable_ifの使用方法がわからないようです。その場合、コンパイラは、指定された関数が正しいタイプである場合にのみ特殊化を許可するためです...

(可能であれば)C ++ 03ソリュ​​ーションが必要であることに注意してください。コードは、いくつかの古いコンパイラでコンパイルする必要があります。

前もって感謝します

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

c++ - std :: enable_if、テンプレートの特殊化と継承

このコードに関するアドバイスについてお聞きしたいと思います。動作しますが、もっとエレガントに書けると思います。これはC++11のコードなので、コンパイルするときは注意してください;)!

ご覧のとおり、 ACから派生したクラスを処理できるクラステンプレートを作成しようとしています。問題は、クラスEと同様にACのどちらかが継承される場合です。実際、私たちはこのようなものを持つこともできます...

...ただし、クラス( Eなど)がACのいずれかを継承すると失敗します。

より良いコードのアイデアはありますか?ありがとう