問題タブ [partial-specialization]
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++ - C++ - テンプレート化されたクラス メソッドをそのメソッドの部分仕様でオーバーロードする
これに似た質問がすでにスタックオーバーフローにいくつかありますが、私が持っている質問に直接答えているように見えるものは何もありません。転載の場合はご容赦ください。
テンプレート化されたクラス (2 つのテンプレート パラメーターを持つ) のいくつかのメソッドを、それらのメソッドの部分的なテンプレート特殊化でオーバーロードしたいと思います。正しい構文を理解できず、不可能だと考え始めています。ここに投稿して、確認できるかどうかを確認したいと思いました。
従うコード例:
クラス全体の部分的な特殊化を書くことができることは知っていますが、それはちょっとひどいです。このようなことは可能ですか?
(私はVS2008を使用しています)編集:これはコンパイルエラーエラーですC2244: 'Test::Set':関数定義を既存の宣言に一致させることができません
ありがとう :)
c++ - テンプレート引数に依存する内部クラス
次の例を考えてみましょう:
g++ (バージョン 4.3.0) を使用してコンパイルした場合
コンパイルエラーは次のとおりです。
私が実際にアーカイブしようとしているのは、列挙値に応じて異なる Imp 実装を持つことです (この例では、列挙型の代わりに int を使用しましたが、問題にはなりません)。
これが許可されていない理由を誰かが説明できますか? 最初のエラーが発生するのはなぜですか? (これ: 修飾名は '{' トークンの前にクラスを指定しません)
テンプレートパラメータに依存するpimplの実装に関して、私は新しい質問を作成しました(より良い例で)here
c++ - c ++ pimplイディオム:テンプレートパラメータに応じた実装
この質問では、テンプレートの引数に応じて異なるpimpl実装を使用する方法を尋ねましたが失敗しました。
たぶん、この例は私がやろうとしていることをよりよく示しています:
構造体Cを特殊化しようとしても失敗します(上記はコンパイルされません)
それで、それは可能ですか?
私はこのような回避策を知っています:
でもできれば避けたい
c++ - 部分特殊化のデフォルトパラメータ
ユーザー側で実現したい構文:
私が今持っているこのための実装(部分的な特殊化のデフォルトパラメータが許可されていないため、機能していません):
静的メンバーを持つenable_ifクラスとラッパークラスを試しましたが、静的メンバーをextern変数に割り当てることはできません。
更新: 実際の問題は、一般的な構造体と特殊な構造体の名前の同等性です。名前を変更せずに機能させる方法がわかりません。
c++ - 非型パラメーターを使用したメンバー関数の部分的な特殊化
タイプと非タイプの両方のテンプレートパラメータを持つテンプレートクラスがあります。メンバー関数を特殊化したいのですが、次の例のように、完全な特殊化をうまく行うことができます。
ただし、この部分的な特殊化はコンパイルされません。
私が試みていることを達成する方法はありますか?これをMSVC2010で試しました。
c++ - ネストされたテンプレートパラメータを使用することは、型以外の引数で部分的に特殊化することが許可されていないのはなぜですか
私はこのコードを持っています
つまり、でN
割り切れる数値5
の場合、コンパイラは部分的な特殊化を使用する必要があります。ただし、コンパイラはその部分的な特殊化を受け入れません。これは、標準では、部分的な特殊化の非型引数がパラメータを参照し、単なるパラメータではない(たとえば、A<N, N>
有効である)コードを拒否することを要求しているためです。しかし、そうする理由は何ですか?
コードをもっとわかりやすい例に変更するだけで、有効であることに注意してください。
型以外のパラメータではなくなったため、これで問題ありません。しかし、仕様がより単純な部分的特殊化を禁止している理由は何ですか?
c++ - テンプレート パラメータ リストが少なすぎる問題
次の疑似コードをGCC4と互換性を持たせる方法を教えてください。MSVCでどのように機能するのだろうか...
c++ - 部分的な特殊化で使用されないテンプレート パラメーター
次のコードがあります。
今、私は の部分的な特殊化をしようとしていますiterator_traits
。私には問題ないように思えますが、g++ 4.4.5 は文句を言います:
これは完全なエラー メッセージです。
c++ - C++の部分的なテンプレートの特殊化に関する問題
私はこれに似た状況にあります:
私が見たところ、これはうまくいくようです。ただし、状況によっては文字列がAとして使用される場合があるため、この特殊なケースに特化したものを作成するだけだと思いました。
残念ながら、これはエラーメッセージに適切に準拠していません。
一方、完全な特殊化は機能しているように見えることに注意してください(実行時にはテストされていませんが、コンパイルされます)
私は何か間違ったことをしているに違いないと思います。正確に何を指摘していただければ幸いです。私は、特定の専門分野がこのように機能することになっていると思いました。
よろしくお願いします。
e:「デフォルト」はどういうわけか誤解を招くと思ったので、DEFAULT_Aの名前をRARELY_USED_Aに編集しました
c++ - 渡されたオブジェクトのメンバー メソッドを呼び出すファンクターの部分的なテンプレートの特殊化
次のファンクターとその部分的な特殊化があります
私はそれを次のように使用しようとしています:
コードの最後の行については、これを取得しています (IDE は発信者を取得します)。
エラー C2440: '' : 'void (__thiscall Foo::* )(void) const' から 'Caller<_T>' 1> に 1> [ 1> _T=const Foo 1> ] 1> で変換できません。ソース型を取得するか、コンストラクターのオーバーロードの解決があいまいでした
このコードは g++ 環境で機能します。(関数がconstオブジェクトCaller<Foo>(&Foo::Bar)
でのみ呼び出されるため、私が g++ で文句を言うのは理にかなっています)。
ファンクターにoperator()(const _T& obj)
/種類を追加するなど、さまざまなことを試しましたが、役に立ちませんでした。operator()(const _T& obj) const
これは、コンパイラによって受け入れられます。
私は何を間違っていますか?Visual C++ で const メンバー関数に対してファンクター テンプレートを機能させるにはどうすればよいですか?