問題タブ [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++ テンプレートの特殊化
コンパイルしてうまく動作する次のコードがあります。
ただし、「デフォルト」機能を削除したいと思います。つまり、't' が int または double のエラーではない GetGlobal<t> へのすべての呼び出しを行いたいと考えています。
たとえば、GetGlobal<char>() はコンパイル時エラーになるはずです。
デフォルトの関数を削除しようとしましたが、想像どおり、多くのエラーが発生しました.それを「無効」にして、関数の特殊なバージョンへの呼び出しのみを許可する方法はありますか?
ありがとう!
c++ - C++ テンプレートの特殊化int を取得しない
次のコードがあります。
その後:
cin >> のように動作するようにしたい。つまり、lua 関数の戻り値を abc に書き込む必要がある。だから私はそのアドレスが必要です..しかし、それはデフォルトのテンプレートでデフォルト設定されています。私は何を間違っていますか?cin がまさにそれを行うので、これを行う方法は確かにあります。
ありがとう!
% を >> に変更した人への注意: そのままなので元に戻しました :D コードは Lua 関数 test("test", 5, nil, 2.333) を呼び出し、その戻り値を abc に保存します。% は関数のパラメーター用、>> は戻り値用です。
c++ - 基本クラスによるC++テンプレートの特殊化
_base *から派生していないクラスでfooのコンストラクターを呼び出すときに、コンパイラーを叫ばせることができるようにしたいと思います。現在のコードでは、foo<_base*>自体のみが許可されています。簡単な解決策はありますか?
メインコード:
c++ - インストールできないクラスの有効な STATIC メンバー関数を使用しています
次のコードがあります。
gcc-3.4、gcc-4.3、Intel コンパイラでは問題なくコンパイルできますが、MSVC9 では失敗します。
MSVC は、「c_traits<C>
クラス テンプレート メンバー関数void foo<C>::go(void)
を C=short でコンパイルする際に、未定義の型を使用する」と通知します。
このクラスはまったく使用されていないため、コンパイラは未使用のクラスの未使用のメンバー関数をインストールしようとします。
メンバー関数を特殊化するのではなく、クラス foo 全体を特殊化することで、この問題を回避できます。しかし、クラス全体を専門化することは、さまざまな理由で私にとって少し問題があるということです。
大きな疑問:何が正しいのか?
- 私のコードは間違っていますか? gcc と intel コンパイラは foo を完全にインストールしないため、問題を無視します。
- コードは正しく、これは未使用のメンバー関数をインストールしようとする MSVC9 (VC 2008) のバグですか?
コード:
c++ - テンプレート特化の問題
私はこれを機能させるために一生懸命努力していますが、運がありません。回避策があると確信していますが、まだ遭遇していません。さて、問題とニーズを簡単に説明できるかどうか見てみましょう。
テンプレート パラメーターの 1 つとして型名を使用できる RGB テンプレート クラスがあります。typename を受け取り、その基本型の分類を作成する別のテンプレートに送信します。例えば:
次に、ビット カウントに基づいて各 RGB 値の最大値を計算するテンプレートを作成します。
次に、実際の RGB テンプレート クラスには、次のものがあります。
固定ポイントのニーズに入るまで、これは私にとって非常にうまく機能します。最大値は少し異なり、それを分離するために型仕様の特殊化を作成する方法がわかりません。私が持っている唯一の回避策は、float と double の特殊化を除去して作成するプロセスであり、一般的なケースが固定ポイントになると想定しています。しかし、これを行うためのより良い方法が必要です。間違ったコードでやりたいことは次のとおりです。
ただし、fixed-pt-t は次のようなテンプレート クラスです。
そのため、コンパイラはテンプレート パラメータのない特殊化を好みません。
fixed-pt-t で動作するように型仕様クラスを特殊化する方法はありますか?
一般的なケースでは問題なく機能しますが、分離することはできません。
c++ - ベクトルから派生したベクトルが必要
この単純なコードを考えてみましょう。
V1のインスタンスがある場合は、Aから派生した任意のオブジェクトをベクターに挿入できます。ここでOKです。
ここで、BとCという2つの単純なクラスがあり、どちらもAから派生しているとします。
V1のインスタンスがある場合、BとCの両方のポインターをこのベクトルに挿入できます。これは正しいと思いますか?
もしそうなら、Bポインターのみが挿入されていることを確認するためにV1からベクトルを導出するにはどうすればよいですか?
テンプレートの使用を考えていましたが、この場合はクラスのベースをすでに知っているので、一時的には何でも使用できますよね?
私が明確であるかどうかわからない、私の英語は役に立たない...
テンプレート引数がAから派生しているかどうかを確認するために、push_backや他の関数をオーバーライドする必要がありますか?
どうか、私が使用しているブーストや構文などについて話す必要はありません...私は本当にこれの概念を理解したいだけです...それはまだ私の心の中で明確ではありません。私はこれに対するいくつかの答えを持っていますが、それらはものをチェックするにはキャストが多すぎると思います、そして私はそれに対するより良い答えがあるかどうかを知るためにここに来ました...
ありがとう!
ジョナサン
ps:私が書いたコメントに答えてくれませんか?時々私はここで何かを尋ねると、最高の回答者が来て戻ってこない:(。またはコメント質問の代わりに別の質問をする必要がありますか?
c++ - テンプレート化されたクラスからの単一メソッドのテンプレートの特殊化
テンプレート化されたクラスを含む次のヘッダーが少なくとも2つの.CPP
ファイルに含まれていることを常に考慮して、このコードは正しくコンパイルされます。
ただし、特殊化メソッドのインラインに注意してください。メソッドが複数回定義されているため、リンカーエラー(VS2008ではLNK2005)を回避する必要があります。AFAIKの完全なテンプレートの特殊化は、単純なメソッド定義と同じであるため、これを理解しています。
では、どうすればそれを削除できinline
ますか?コードを使用するたびにコードを複製しないでください。私はGoogleを検索し、ここSOでいくつかの質問を読み、提案された解決策の多くを試しましたが、正常に構築されたものはありませんでした(少なくともVS 2008では)。
ありがとう!
c++ - テンプレート化された型によるテンプレートの特殊化
次の関数を使用してクラス テンプレートを特殊化したいと考えています。
この関数には引数がなく、Foo の型に基づいて結果を返します。(このおもちゃの例では、型のバイト数を返しますが、実際のアプリケーションでは何らかのメタデータ オブジェクトを返したいと考えています。) 特殊化は、完全に指定された型に対して機能します。
ただし、これを (他の) テンプレート パラメーター自体に依存する型に一般化したいと思います。次の特殊化を追加すると、コンパイル時エラーが発生します (VS2005):
これは正当な C++ ではないと思いますが、なぜですか? そして、このタイプのパターンをエレガントに実装する方法はありますか?
c++ - クラス テンプレートの特殊化に関する問題
一部のコードを VC9 から G++ に移植しようとしていますが、テンプレートの特殊化が明らかにクラス メンバーに対して許可されていないという問題に遭遇しました。
次のコードは、クラス メソッドの getValue 特殊化に関するこれらのエラーの例です。すべての場合において、エラーは「エラー: 名前空間以外のスコープでの明示的な特殊化class ...
」です
正確な構文がサポートされていないだけで、マイナーな変更で機能するのでしょうか、それともこのような特殊化を避けるためにコードを変更する必要がありますか? 後者の場合、一般的にこれを行うための最良の方法はどれですか?