問題タブ [class-template]

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.

0 投票する
2 に答える
207 参照

c++ - operator< が存在するのに lt を定義するのはなぜですか?

ベクトル操作のコードには、次のクラス テンプレート定義が含まれています。

しかし、なぜ?T余分な例外処理を使用しておらず、既に と を持っoperator<ているクラスのオブジェクトに依存していますoperator>。演算子を使用するのは簡単/簡単ではありませんか? それとも、比較のためにテンプレート クラスを使用する必要がありますか?

0 投票する
1 に答える
372 参照

c++ - C++ クラス テンプレートの継承呼び出しコンストラクター/デストラクター

私は次のクラスを持っています。

そしてcppファイルで

私はクラスを持っています:

cppファイルで

これからエラーメッセージが表示されます:

Actors::DivideConquerTask<int>::~DivideConquerTask() undefined reference toActors::DivideConquerTask::DivideConquerTask(int, int)への未定義の参照

Actors は、すべてが宣言/定義されている名前空間です。

ここで何が問題なのですか?ベース コンストラクタ/デストラクタが見つからないのはなぜですか?

注: 正常に動作しているいくつかの些細な機能は省略しています。

0 投票する
1 に答える
372 参照

c++ - テンプレート化されたクラス内の boost::unordered_map の boost::tuple に関する問題

C++ で高価な 2D 関数を自動的に補間するメソッドを作成しました。私は現在、クラスが関数ポインタを受け入れられるようにして、任意の関数を補間できるようにしようとしています。これを行うには、関数ポインターを評価する必要があるオブジェクトごとにテンプレート化できるように、テンプレート化されたクラスが必要なようです。リンカーが必要な各オブジェクトのクラスをテンプレート化できるように、ヘッダーでクラスを完全に定義する必要があることに気付いた後、その部分はそれほど悪くありません。今こする。

クラス内では、boost::unordered_map を使用して関数の評価を保存し、関数を不必要に呼び出さないようにしています。補間中に、(曲率に基づいて) グリッドが十分に記述されるようにグリッドを調整します。元のポイントが x=0, .5, 1 にあった場合、次のセットは x=0, .25, .5, 1 になる可能性があるため、メッシュをローカルに細分化しています。 2 回目のパスでは x = .25。これは、動的関数ポインターの代わりに、ハードコードされた関数を使用して独自に機能しています。

私が抱えている問題は、boost::tuple に必要な operator と hash_value 関数を定義することです。ヘッダーに入れると、それらは複数回定義されます(ヘッダーのインクルードごとに)。オブジェクトとしてコンパイルしてリンクしようとすると、リンカーは定義を見つけることができません。クラスで参照する必要がある 2 つの定義:

私のヘッダーには、構造体と typedef があります。

これは、テンプレート化されたクラスのすぐ上にありますが、省略されています。

operator== および hash_value メソッドを複数回定義せずにクラスで使用できるようにするにはどうすればよいですか? 私はヘッダファイルを守っています。私はC ++の初心者なので、うまくいけば、私が得ていない単純なものです。ありがとう!

0 投票する
2 に答える
1013 参照

c++ - 静的メンバーが使用されていない場合、静的メンバー変数はテンプレート クラスで初期化されますか?

静的メンバーが使用されていない場合、静的メンバー変数はテンプレート クラスで初期化されますか? タイプを登録するために使用します。

私はそれをテストする方法を見つけます。2 以外の 1 を出力します。regist() は呼び出されず、静的メンバーは初期化されません。私のテストはVC110コンパイラーで行われています。また、オンラインでテストします

0 投票する
0 に答える
260 参照

c++ - SFINAE で使用されるエイリアス テンプレートがハード エラーにつながる

enable_ifあるクラス テンプレートで定義されたイネーブラー ( のエイリアス テンプレート) を別のクラス テンプレートで使用したいと考えています。次のようになります。

これは SFINAE では問題なく機能します。しかし、次のような 2 番目のクラスに別のエイリアス テンプレートを追加すると、

このイネーブラーを SFINAE に使用すると、置換は (正しく) 失敗しますが、g++4.8.0 および 4.8.1 ではハード エラーが発生します。clang++3.4 ではソフト エラーのみが発生し、SFINAE は機能します。

どちらが#if 1生成されますか:

しかし、using X = B< T >;g+4.8.0 でエラーが発生します。

あるクラス テンプレートから別のクラス テンプレートにイネーブラーを「エクスポート/インポート」する方法は?

SFINAE が機能しないのはなぜですか?

0 投票する
0 に答える
116 参照

c++ - クラス テンプレートのさまざまなコンテキストでのイネーブラーのさまざまな動作

行動がこんなに違うのはなぜ?#if 1version は正常に (これは奇妙です) コンパイルして、予想される出力をstdoutに生成しますが、 version withはそうで#if 0はありません。

これはエラーを生成します (基本的に、'B' は両方のケースで (実際には) 私の期待に応じて非公開です):

g++ -v出力には次の行が含まれます。

B以外からはまったくアクセスできないと思いますX

この問題は、例外的にクラス テンプレートでのみ発生しますが、純粋なクラスでは発生しません (ここでは、両方のバリアントをコンパイルする必要はありませんが、コンパイルされているため、2 つの同一の問題があります)。

0 投票する
2 に答える
10829 参照

c++ - C++ - クラス テンプレートの定義 (ヘッダー/ソース ファイル)

この OTB アプリケーションを移植するvoreen (この.cpp | .hのような) でプロセッサを作成したい:

http://hg.orfeo-toolbox.org/OTB/file/ca4366bb972e/Applications/Segmentation/otbSegmentation.cxx

ほとんどすべてのパラメーターをプロパティなどにコーディングしましたが..

376のように見ると、typedef 型である FloatVectorImageType::SizeType のクラス テンプレートが表示されます。

私は C++ テンプレートに慣れていないので、最初の質問は、このテンプレートの実装をプロセッサの .cpp または .h ファイルのどこに置くべきかということでした。上記のような c++ チュートリアルやその他のプロセッサの例を簡単に見てみると、ヘッダーでテンプレートを宣言し、.cpp で定義する必要があることがわかりました。

問題は、コンパイラが .cpp 内で typedef 型のテンプレート クラスを定義できないことです。typedef が認識されません。

それで、誰かが私をここで正しい方向に向けることができますか?

セグメンテーションプロセッサ.h

セグメンテーションプロセッサ.cpp

エラー: 'VectorImageType' はタイプを指定していません (修正済み)

0 投票する
2 に答える
199 参照

c++ - テンプレート引数としての関数ポインタからの型推定

私はテンプレートを初めて使用し、それらを使用するのに少し問題があります。以下に、コード化できないコードを投稿しています。この作品の作り方に助けが必要

関数ポインターがテンプレート引数としてテスター クラスに渡され、TClass インスタンスがパラメーターとしてコンストラクターに渡されるようなものが必要です。コンストラクターでは、関数ポインターを使用して、関数ポインターであるテスター クラスのメンバー変数に testFunc をバインドします。次に、テスター クラスが破棄されている間に、testFunc が呼び出されます。テンプレートの型推論を解決できません

0 投票する
1 に答える
87 参照

c++ - クラス テンプレートを子クラスに継承するときに、そのクラス テンプレートの型を指定できますか?

たとえば、親クラスのテンプレートがあるとします。そして、その上にいくつかの子クラスを構築したいと考えています。各子クラスは型名固有です。親クラス テンプレートを継承するときに使用する型名を指定できますか?

クラス定義の例:

このコードは正しいですか?