問題タブ [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++ - インスタンス化後のテンプレートの特殊化?
私の完全なコードは長すぎますが、ここに私の問題の本質を反映するスニペットがあります:
このコードをコンパイルすると、次のエラーが発生します。
ここで、これらのクラス用に std::hash を特殊化する必要があります (標準の std::hash 定義にはユーザー定義型が含まれていないため)。これらのテンプレートの特殊化を class の定義の前に移動するとBPCFGParser
、さまざまなことを試みたときにさまざまなエラーが発生し、どこか ( http://www.parashift.com/c++-faq-lite/misc-technical-issues .html ) 私はそれを読みました:
クラスをテンプレート パラメーターとして使用する場合は常に、そのクラスの宣言を完全にする必要があり、単純に前方宣言するのではありません。
だから私は立ち往生しています。BPCFGParser
定義後にテンプレートを特殊化することはできません。また、定義前にテンプレートを特殊化することもできませんBPCFGParser
。どうすればこれを機能させることができますか?
特殊化を BPCFGParser 内の内部クラスに移動する必要があります。そうすることで、両方の要件が満たされます。
答えてくれてどうもありがとう:)
hash
class は namespace 内で定義されますstd
。hash
名前空間以外のスコープでテンプレートを特殊化することはできません。以下でも:
動作しませんでした。ただし、特殊化を で囲むとnamespace std {}
、次の奇妙なエラーが発生します。
velocityreviewsで与えられた回答で、誰かが名前空間をクラス内で定義できないと主張しています。だから私はまだ立ち往生しています。
c++ - const メンバ関数ポインタの特殊化
いくつかのユーティリティ コードを const メンバー関数に特化しようとしていますが、単純なテスト ケースを機能させるには問題があります。
作業を簡素化するために、Boost.FunctionTypesとそのcomponents<FunctionType>
テンプレート ( const メンバー関数のタグとなるMPL シーケンス) を利用しています。contain
const_qualified
しかし、以下のテスト コードを使用すると、const メンバー関数の特殊化は失敗します。誰かがそれを機能させる方法を知っていますか?
テストコードが出力されます (VC8 とブースト 1.40 を使用):
非定数
非定数
予想される出力は次のとおりです。
非定数
定数
テストコード自体:
c++ - 複数の継承されたテンプレート化された関数を特殊なバージョンでオーバーライドする
では、最初にサンプル コードを示します。これは、コンパイルされませんが、私がやろうとしていることを伝えようとする私の試みです:
だから、私がやろうとしているのは、派生クラスをさまざまなコールバックリストに自動的に接続する一種のラッパークラスを継承することです。派生クラスの特定のインスタンスをリストに接続する必要があります。ご覧のとおり、派生クラスの作成の一環として、「ユーザー」がコールバック関数を作成する必要があります。
別の構文を使用する必要があるかもしれませんが、これは機能するはずです。うまくいかない場合、何か提案はありますか?
c++ - コンストラクターの C++ テンプレートの特殊化
テンプレート化されたクラス A<T, int> と 2 つの typedef A<string, 20> と A<string, 30> があります。A<string, 20> のコンストラクターをオーバーライドするにはどうすればよいですか? 以下は機能しません。
クラス A<std::string,20> に、他のクラスではできないことをさせたいと思います。コンストラクター A:A(int) を変更せずにこれを行うにはどうすればよいですか?
c++ - テンプレート基本クラスによるテンプレートの特殊化
それ自体がテンプレート クラスであるクラスに特殊化を提供しようとしているテンプレートを作成しています。それを使用するとき、私は実際にテンプレート化されたクラスの派生物でそれをインスタンス化しているので、次のようなものがあります:
いずれの場合も、最初のバージョンが呼び出されます。したがって、基本的に私の質問は次のとおりです。どこで間違ったのか、UseArg(5) を呼び出すときに arg を返すバージョンと、UseArg(intArg) を呼び出すときに別のバージョンを呼び出すにはどうすればよいですか? このようなことを行う他の方法 (UseArg のインターフェイスを変更せずに) はもちろん大歓迎です。
注意として、この例は少し単純化されており、実際のコードではより複雑なものをラップしており、派生クラスにはいくつかの実際の操作があることを意味しています。
c++ - C++ の特殊化に基づくオーバーロード
次のように、パラメーターの特殊化に基づいてオーバーロードされる関数を作成しようとしています。
...しかし、私のMSコンパイラは私にこのエラーを与えています:
エラー C2681: 'Mobile *': dynamic_cast の式の型が無効です
どちらのクラスにも仮想関数があります。この状況でのアップキャストのキャストは間違っていますか? 私は C スタイルのキャストを試してみましたが、すべてが意図したとおりに機能します。また、この設計に潜在的な落とし穴はありますか?
c++ - コンパイラは、独自のインスタンス化ではなく、テンプレートの特殊化を使用することをどのように認識していますか?
次のファイルを検討してください。
フー.H
Foo.C
main.C
コンパイルして実行すると、7 が出力されます。何が起きてる?テンプレートはいつインスタンス化されますか? コンパイラがそれを行う場合、コンパイラは独自のバージョンの Foo をインスタンス化しないことをどのように知るのでしょうか?
c++ - 型特性のヘルプ
次のテンプレート クラスがあるとします。
変えることはできませ んWrap
。大事です。
から派生したクラスがあるとしWrap<T>
ます。例えば、
これらのクラスも変更できません。上記のすべてのクラスはサードパーティです。彼らは私のものではありません。
次のコンパイル時間が必要ですtype_traits
。
私が必要なものは何?
c++ - テンプレートの専門化
次のテンプレートのセットがあります。
funcT( x1 );
関数 #3 を呼び出し、関数 #2 を呼び出すが、期待どおり #4 を呼び出さない理由を誰か説明してもらえますかfuncT( &x1 );
?
私はすでにこの記事http://www.gotw.ca/publications/mill17.htmを読みました。これには、「オーバーロードの解決は特殊化を無視し、基本関数テンプレートのみで動作する」と書かれています。しかし、このロジックによればfuncT( x1 );
、#3 ではなく関数 #1 を呼び出す必要があります。私は混乱しています。
c++ - 一部の (すべてではない) クラス テンプレート パラメータに特化することは可能ですか?
一部の (すべてではない) クラス テンプレート パラメータに特化することは可能ですか?
例えば: