問題タブ [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++ - クラス テンプレートの部分的な特殊化に関する問題
私は、部分的なテンプレートの特殊化を必要とする関数を実装しようとしており、静的構造体の手法に戻ってきましたが、多くの問題が発生しています。
最初: 構造体は別のクラス (Push をメンバー func として提供するクラス) 内にネストされていますが、他のネストされたクラスはすべてアクセスできますが、テンプレート パラメーター (StackSize) にアクセスできません。私はそれを回避しましたが、通常のクラスのように StackSize にアクセスできればすっきりします。
2 番目: コンパイラは、T を使用していない、または T を推測できないと文句を言います。
3 番目: コンパイラは、現在のスコープ (クラス スコープ) でテンプレートを特殊化できないと文句を言います。
何が問題なのかわかりません。誤って不適切な構文を呼び出したことがありますか?
c++ - VS2010 C++ メンバー テンプレート関数の特殊化エラー
VC2005 で動作する次の (最小化された) コードがありますが、2010 では動作しなくなりました。
「index_type」が依存型の場合、特殊化で常に C2770: 無効な明示的なテンプレート引数(s) エラーが発生するようです。このコードは実際にはエラーを生成するのに十分であることに注意してください。コンパイルするには空のメインで十分であり、テンプレートをインスタンス化する必要さえありません。
index_type が依存型でない場合は正常に機能します。なぜこれが VC2010 でそうなのか、これが実際に標準的な動作なのかバグなのか、回避できるのか、考えはありますか?
c++ - C++ の基本的なテンプレートに関する質問
テンプレートの特殊化と少し混乱しています。
私はクラスVector2をVector3持っoperator+=ています(次のように定義されています)。
ここで、一般的な追加動作を追加して、次のように言いたいと思います。
これは正常にコンパイルされ、 と の両方Vector2で機能しVector3ます。しかし、もう少し効率的な "+" 操作がVector2必要で、次のように動作させたいとしましょう (テンプレートの特殊化を使用) :
これは問題ないように見えますが、残念ながら、これら 2 つのコードのチャンクを互いの直後に配置すると、コードがコンパイルに失敗します。
(リンカーはエラーを言いますLNK2005: "Vector2 const operator+<Vector2>(Vector2 const &,Vector2 const &)" (??$?HVVector2@core@lf@@@core@lf@@YA?BVVector2@01@ABV201@0@Z) already defined in ...)
私のエラーは何ですか?どこで間違ったのですか?
ありがとうございました。
c++ - C++ テンプレート特殊化コンパイル
私が達成しようとしていることを説明するために、問題の概要を詳しく説明します。問題の詳細を無視したい場合は、最後の段落に質問があります。
任意の型の値を渡したいクラス設計と、渡された値をクラス内の文字列に追加される文字列表現に変換する関数に問題があり、データのストリームを効果的に作成しますpush()。pop()では逆のことが起こりpop()、ストリームを取得して、ストリームの先頭にある数バイトを指定された型に変換します。
作成push()とpop()関連付けられたテンプレートstringstreamは、明らかな解決策です。ただし、クライアントを再コンパイルせずに文字列の格納方法 (暗号化や圧縮など) を変更できる DLL 内でこの機能を使用したいと考えています。アルゴリズムが変更された場合、 type のテンプレートをT再コンパイルする必要があります。
次のアイデアはpushByte()、pushInt()、popByte()、popInt()などの関数を使用することでした。クライアントは静的インターフェイスのみに依存しているため、クライアントを再コンパイルせずに実装を変更できます。これでいいでしょう。ただし、それほど柔軟ではありません。たとえば、値が byte から short に変更された場合、その値に対応する pushByte() のすべてのインスタンスを にpushShort()、同様にpopByte()toに変更する必要がありpopShort()ます。オーバーロードpop()しpush()てこれに対処するために、型の競合が発生します (明示的なキャストが発生し、最終的に同じ問題が発生します)。
上記のアイデアで、労働者階級を作ることができました。しかし、特殊なテンプレートがどのようにコンパイルされるのか疑問に思いました。push<byte>()andを作成した場合push<short>()、それは型固有のオーバーロードになり、byte から short に変更すると、使用するテンプレートが自動的に切り替わります。これは理想的です。
さて、私の質問は、この種のオーバーロードをシミュレートするためだけに特殊化されたテンプレートを使用した場合 ( type のテンプレートを使用せずにT)、すべての特殊化が DLL にコンパイルされ、クライアントの再コンパイルなしで新しい実装をディスパッチできるようになるでしょうか? Tそれとも、クライアントのコンパイル時にタイプのテンプレートと同じ方法で特殊なテンプレートが選択またはドロップされますか?
vb.net - ジェネリック変数を特殊化する
のために特別なことをしたいジェネリックメソッドがありStringsます。
私は値DirectCast(DirectCast(value, Object), String)を取得することがわかりました(すでに確認した場合)。同様の質問に対する多くの回答で述べたように機能します。StringGetType(T) Is GetType(String)DirectCast(DirectCast(newvalue, Object), T)
しかし、よりエレガントでパフォーマンスの高いものはありますか?
c++ - テンプレート関数の特殊化のデフォルト引数
トークンの関数のデフォルトの引数行に構文エラーC2689およびC2059が表示され::ます。しかし、専門性がなければ、うまくいきます。そして、デフォルトの引数を変更しても、まだ特殊化を行っている場合:
問題もなくなりました。
今、私がこのようにそれを使用する場合:function<int>(1,2,3);またはfunction<float>(1.0f)それは素晴らしいので、テンプレート関数が特殊化されている場合、それを呼び出すときにデフォルトの引数を書き直す必要があるようです?
しかし、2番目のケースでは、呼び出し時に構文エラーがないstd::numeric_limits<T>::..状態に置き換えますが、それはなぜですか?T(..)function<int>(1)
(私はVisual Studio 2010 x64を使用しています)
元の問題はバグが原因であるため、質問は現在、それを回避する方法に変更されていますか?
c++ - C++: 継承とテンプレート化されたクラスの包含
私は次の構造体を持っています:
型が STL セットでうまく機能するように、演算子を追加できるように特化したいと考えています。(直接変更することはできませんOdp。これはレガシー コードです。) これを行うには、次の 2 つの方法があります。
最初のものよりも2番目のものを好む理由はありますか? 最初の方法は、よりクリーンなコードを可能にするようです。
(また、「テンプレートの特殊化」という用語が何を意味するのかについて、私が混乱している可能性もあります。)
specialization - 複数の専門化と単一の専門化のどちらが最適ですか?
応募者が複数の言語や技術を知っている必要がある求人が掲載されていることに気づきました。特にWeb開発でこれを見つけます。いくつかのことに特化すればするほど、それぞれについての知識が少なくなるという点を考えると、私はこれがあまり好きではありません。1 人にお金を払って多くのことをさせれば、最終的には良いことだとは思いますが、実際には彼らのせいではない劣悪なサービスを提供する価値はありますか? 良い読み物は、このような研究です。
これは、マルチタスクを行うほど、質の悪い仕事を大幅に行うことを示しています。
これが私の質問です。私は自分の仕事が得意であり、誰かがやりたいことができると言ったときに嘘をつきたくないので、いくつかのことだけに特化したいと思っています。いくつかのことに特化すると、多くのテクノロジーで働いた場合よりも仕事を見つけるのが難しくなりますか?
2 番目のポイント。私の父は DBA です。彼は、自分が知っている雇用主をだますのに十分なことだけを学び、雇われた後にそれを学ぶ人の数にショックを受けるだろうと私に言いました。それから彼は、もし私が必要なら、私も同じことをしなければならないかもしれないと言った。私はそれが好きではなく、自信を持ってできる仕事にのみ応募したいと思っています。これは正しいことだと思いますが、私は仕事を見つけるのに苦労していますが、嘘をつく人は簡単に仕事を見つけることができます. これは私が常に対処しなければならないことですか?
興味深いことだと思いますが、経験豊富な開発者から知りたかっただけです。私は 21 歳で、html/css、javascript、および python を専門としています。私はいくつかの Lisp のことも知っていますが、手を出すだけです。
みんなありがとう
c++ - テンプレートのC++部分特殊化でエラーが発生しました
私はPC-Lint(静的コード分析のための優れたツール-http : //www.gimpel.com/を参照)を使用しています。次のコードのチャンクについては、次のとおりです。
PC-lintは私に警告を出します:
コードは問題なく、エラーはlint側にあると思いますが、Lintツールは本当に素晴らしいツールであり、私が何かを知らないよりも可能性が高いと思います。それで、このコードは大丈夫ですか?
c# - 型の特殊化; 特定のタイプごとに判断して対応する方法は?
私が一般的なクラスを持っていると想像してくださいPerson。次に、そのクラスの特殊化があります。たとえばDanishPerson、 とBritishPerson.
ここで、Person の正しいインスタンスを返す関数が必要です。これは、その人がどの国にいるかに応じて異なります。または、その人がどのタイプの人であるかを簡単に判断する方法が必要です。だから私は機能を持っています:
人物のリストには、またはのいずれかのタイプのオブジェクトが含まれています。タイプによっては、適切な ViewModel を UI に表示する必要があります。そのため、リストに type のデンマーク人が含まれている場合、デンマーク固有のプロパティ (およびその他) を表示する 1 つの UI を表示する必要があります。DanishPersonBritishPersonDanishPerson
さて、私の質問は、これをどのように行うのが最善の方法ですか? を使用して常に if/else を使用できると思いますtypeofが、よりエレガントで一般的な方法を望んでいましたか? スペシャライゼーションを扱うとき、私には一般的な問題のように思えるので、これを行うためのいくつかのパターンがあるのではないかと考えていましたか?