問題タブ [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を使用して、オプションで構造体メンバーを追加します
このテンプレートが与えられた場合:
...「enable_if」を使用して、SpecialTypeメンバーを条件付きで存在させたい。つまり、テンプレートがA=SpecialCase1またはSpecialCase2タイプでインスタンス化されている場合のみです。他のすべての場合、SpecialTypeメンバーが欠落していることを望みます。
理由がわからない場合は、これは最適化に関するものです。つまり、構造体で無駄なペイロードを運ばないということです。私はテンプレートメタプログラミングの初心者ですが、どういうわけか「enable_if」と2つの「is_same」が必要であることを理解しています。
編集:一般的なC ++で(つまり、Boost固有のものなしで)それを行うことはプラスになります。
c++ - enable_if を使用した「フェイク」テンプレート クラス メソッドの特殊化
SFINAE 原則/enable_if を使用して、クラス テンプレート メソッドの部分的な特殊化を「偽造」できるのではないかと思います。たとえば、 のFoo
2 つのバージョンFoo::bar
が定義されているクラス テンプレートがあるとします。たとえば、一方を有効にしてもう一方を無効にしたい場合T2 = int
や、その逆の場合。
PS: enable_if を優先してください。ありがとう。
c++ - タイプが整数タイプか浮動小数点タイプかに基づいてテンプレートメソッドを変更するにはどうすればよいですか?
私は、整数型(short、int、long)と浮動小数点型(float、double)の両方をとるMatrixクラスに取り組んでいます。一部のメソッドを浮動小数点型(反転メソッドなど)のみに制限し、一部のメソッドに浮動小数点型と整数型(==演算子など)の実装を変えたいと思います。Boostの「enable_if」と「is_integral」/「is_floating_point」を使用するのが正しい方法だと思いますが、それを機能させることができないようです。
私の実装は、このc++セミ擬似コードに似ています。
これは多くのコンパイルエラーを生成しますが、私はこれらが最も関連性のあるものだと思います:
と
これは、少なくともboostのenable_ifを使用しない限り、タイプごとに異なる実装を行うことができないことを示しています。これは正しいですか?
もしそうなら、どうすればこれを行うことができますか?テンプレートの特殊化が進むべき道であることは知っていますが、コードの重複が多すぎないようにしたいと思います。
c++ - default-constructorを条件付きで定義するにはどうすればよいですか?
私は次のようなクラスを考えていました:
コンストラクターテンプレートを使用できるとは思いませんstd::enable_if
(引数がないため)。私が間違っている?そうでない場合、これを行う他の方法はありますか?
c++ - 基本クラスに基づく特殊なメンバー関数
この質問は次のようになります。 すべてのサブクラスに対するc++テンプレートの特殊化テンプレート化され た関数の代わりに、クラステンプレートの基本クラスに基づいてさまざまなことを行う必要があるテンプレート化されたクラスのメンバー関数があります。
boost::enable_ifのわかりやすいチュートリアルが見つかりませんでした。したがって、このマイナーな変更の構文を正しく取得できません
c++ - std::is_reference を使用した std::enable_if がコンパイルに失敗する
カバーの下にポインターを使用して「参照」を保存するように、次のコードで同様std::reference_wrapper
のことをしようとしています。
ただし、これはコンパイルに失敗します。
enable_if
参照パラメーターの戻り値を trueにするにはどうすればよいですか?
c++ - テンプレート化されたクラスで専用メソッドを定義するための boost:enable_if
カスタムメソッドが必要です-テンプレート化されたクラスでMyMethodを呼び出します-Fooを呼び出します-Fooが特定のテンプレートパラメータータイプでインスタンス化されている場合のみ(たとえば、AがintでBがstringの場合)、それ以外の場合は、他の可能な Foo インスタンスに MyMethod がまったく存在しないようにします。
それは可能ですか?
例:
boost:enable_if はそこに役立ちますか?
ありがとう!!
templates - C++ テンプレート クラスの継承チェック
私はこの問題で一日中困惑しています。基本的に、テンプレートの型が、私がやっていることで機能するクラスから継承されていることを確認したいと思います。これを行うには、std::enable_if を使用しました。コンパイル時に希望どおりに動作するものがありますが、クラスで実際に何かを実行しようとすると、未定義の参照エラーが発生し続けます。
ソースファイルをコンパイルするのは難題でしたが、私が思いついたのは、たくさんあるのはまったくがらくたのように見えたので、コードを縮小するマクロを作成しました.
マクロは間違っているが、ヘッダーは正しいと感じていますが、それはただの勘です。前もって感謝します。
boost - enable_if とコンストラクタ
これの何が問題なのですか?
enable if??? を使用すると、これが機能するはずだと思いました。
ヘルプ??
2 番目のコンストラクターを除外する必要はありませんか?
};
c++ - enable_if SFINAE に関する問題
私が書いているプログラムでいくつかの不可解な SFINAE 問題が発生していたので、それを独立したサンプル プログラムにまとめました。
このプログラムは、エラーや警告なしでコンパイルされます。ただし、これは次のとおりです。
次のエラーが発生します。
test.cpp: 関数内
int main()
:test.cpp:22:18: エラー: から
From<Base>
非スカラー型への変換がTo<Derived>
要求されました
これは、おそらく置換が失敗し、コンストラクターが表示されないためです。
SFINAE のやり方が間違っているのでしょうか、それともコンパイラのバグですか? WindowsでruvenvbのGCC 4.7.1を使用しています(std=c++11
違いがある場合)。