問題タブ [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++ - 一部のオブジェクトの途中からメモリの割り当てを部分的に解除して「分割」することは可能ですか?
たとえば、200 個の整数の配列があります。私がしたいのは、それを 80 個の整数の 2 つの配列に変換し、間にある 40 個の整数を削除することです。もちろん、目標は、長さ80の整数の2つの新しい配列を割り当てて最初の配列からコピーすることなく、既存のメモリブロックを使用することです.
移動セマンティクスは、同様の低レベルのアプローチを使用して右辺値の不要なコピーを回避するため、同様の効果を達成するが既存のデータを複数のオブジェクトに割り当てる低レベルのアプローチがあるかどうかが私の質問です。
たとえば、カットがあり、新しい要素が始まる生のメモリアドレスにポインターを割り当て、同じデータを使用する配列として機能させ、初期配列によって既に割り当てられて埋められているか?
当然、初期配列を削除してそのアドレスを取得し、それを使用してそのメモリ領域を新しい要素に割り当てることもできますが、新しいオブジェクトを割り当てる正確なアドレスを C++ に伝えることは可能ですか? また、初期配列のデータが削除されてから、同じメモリ領域が新しいオブジェクトに再割り当てされるまでの間に破損しないことを保証する方法はありますか?
このようなアプローチは、私が読んだ c++ に関するどの本にもありませんが、目的の結果を達成するための低レベルのトリックが存在する可能性が非常に高いと感じています。
c++ - 関数テンプレートを部分的に特殊化しようとすると、プログラムが機能しないのはなぜですか?
私はテンプレートメタプログラミングの初心者で、類似しているがわずかに異なるコードの複数のバージョンの生成を実装しようとしています。
完全な専門化はうまく機能します:
:ごみ
:これは私のテンプレートパラメータです1:0と2:1
しかし、以下のような部分的な特殊化は失敗します。
エラーあり:エラーC2768:'DoSomething':明示的なテンプレート引数の不正使用
(この場合、ジェネリックテンプレートの本体はコメント化されていますが、違いはありません)
このような特殊化は、部分的な特殊化のすべてのサンプルに含まれていますが、私には機能しません。これは私を大いに混乱させます。
どんな提案にも非常に感謝します
c++ - 部分的なテンプレートの特殊化のあいまいさ
メインのステートメントがあいまいな理由がわかりません。
X<int, T*, 10>
最も専門的なテンプレートではありませんか? これはhttp://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fpartial_specialization.htmの例です。
c#-4.0 - 実行時コードの特殊化のための式ツリーとIL.Emit
最近、実行時にC#コードを生成できることを知り、この機能を使用したいと思います。線と平面の交点の計算など、非常に基本的な幾何学的計算を行うコードがあります。計算の多くは同じ平面または同じ線に対して実行されるため、一部のメソッドに特化したコードを生成することで、パフォーマンス上の利点が得られると思います。そして何度も。交差点を計算するコードを特殊化することで、パフォーマンス上の利点を得ることができるはずです。
問題は、どこから始めればよいかわからないことです。いくつかのブログ投稿を読んだり、MSDNドキュメントを閲覧したりすることで、実行時にコードを生成するための2つの可能な戦略、式ツリーとIL.Emitに出くわしました。式ツリーの使用は、OpCodeやその他のさまざまなMSIL関連の複雑さについて何も学ぶ必要がないため、はるかに簡単に思えますが、式ツリーが手動で生成されたMSILと同じくらい高速かどうかはわかりません。それで、私がどの方法を使うべきかについての提案はありますか?
c++ - C++: テンプレート: 部分的な特殊化: Print Everything テンプレート
皆さん、こんにちは!
次のコードを持つ:
コンパイラ: MSVCPP10
コンパイラ出力:
私は立ち往生しています。部分的な専門化を完了するのを手伝ってください。
ありがとう!
c++ - マップを使用した部分クラステンプレートの特殊化
私は新しいC++プログラマーです。少し前に、JavaとANSI Cを学び、試してみることにしました。
ええと、私はC ++が大好きですが、イテレーターがどのように機能するかが気に入らなかったのです。
Javaでは、コンテナ全体をプライベートにして、そのイテレータにgetter関数を実装できます。イテレータにhasNext()
は、コンテナの最後に到達したかどうかに応じてブール値を返すメソッドがあります。
C ++で同様のことを行う唯一の方法は、2つのゲッターを作成することです。これにより、最初iteratorBegin()
とiteratorEnd()
最後の位置に対応するインターレーターが返され、返されたイテレーターがインクリメントされてiteratorBegin()
、と比較さiteratorEnd()
れ、最後までコンテナーを反復処理できるようになりました。位置に達していた
しかし、ゲッターメソッドを1つだけ使用したいので、「独自のイテレータークラスを作成しましょう」と考えました。
これまでのところ、セットとリストでうまくいきましたが、マップではうまくいかないようです。これが私を悩ませているコードです:(クラスは別の.hで定義されており、これはcustomIteratorと呼ばれます.cpp)
#include <map>
特殊なメソッドをコンパイルすると、次のように表示されます。エラー:ファイルの上に追加したにもかかわらず、このスコープで「マップ」が宣言されていません
コードブロック付きのgccバージョン4.4.5(Debian 4.4.5-8)を使用しています
どうか、助けが必要です。
ご清聴ありがとうございました!
c++ - C ++の部分的な特殊化:このテンプレートをどのように特殊化できますかこのテンプレートに?
2つのパラメータテンプレートを1つのパラメータテンプレートに変換するにはどうすればよいですか?
上記のコードは、「Aa;」でコンパイラエラーを発生させます。'テンプレート引数の数が間違っています'。
c++ - 部分的なテンプレート テンプレートの特殊化
このコードがあります:
ただし、場合によってはasT*
の代わりに使用する必要があります- 次のように:std::list<T>
InnerCont
この場合、「テンプレート テンプレート」パラメーターの部分的な特殊化を使用することは可能ですか?
または、頭痛を最小限に抑えてアーカイブする方法..
c++ - C++列挙型テンプレートの部分的な特殊化
実装する必要のあるアルゴリズムに合わせて非常に調整された行列クラスがあります。私はエイゲンについて知っていますが、それは私の法案に合わないので、私は自分でやらなければなりませんでした。私は列メジャーの順序付けに取り組んできましたが、行メジャーを使用する強力なユースケースもあるので、順序付けを定義する追加のテンプレートパラメーターを使用してテンプレートマトリックスクラスを特殊化したいのですが、したくありません。既存のコードを壊します。
これの具体的な効果は、テンプレートの部分特殊化を使用して、2つまたは3つの主要なクラスメソッドを異なる方法で生成することです。たとえばoperator(int i, int j)
、異なる順序を定義します。プリプロセッサを使用して同様の概念を実行できます#define
が、これはあまりエレガントではなく、すべてをコンパイルするだけで機能します。いずれかのモードで。これは私が達成しようとしていることのスケッチです:
しかし、コンパイラは部分的な特殊化について文句を言います。
ただし、以下に示すようにこれらの機能を完全に専門化すると機能しますが、これは非常に柔軟性がありません。
これは言語の部分的なテンプレートの特殊化のサポートの問題ですか、それとも間違った構文を使用していますか?