問題タブ [explicit-instantiation]
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++ - テンプレート テンプレート関数のインスタンス化
CLASS_TEMPLATE テンプレート引数に関するヒントがない場合、コンパイラはどのように関数をインスタンス化しますか?
テンプレート template に関する私の仮定は間違っていました。
の正式なテンプレート パラメータは、1 つのテンプレート パラメータを持つfuncI
テンプレートです。
template void funcII < std::vector > () ;
funcII
テンプレートを次のようにインスタンス化し{ std::vector< int > container0 ; std::vector< float > container1 ; /* ... */ }
ます。
c++ - 明示的なテンプレートのインスタンス化でコードの重複を避けるために decltype() を使用できますか?
長いテンプレート関数宣言があります:
過負荷なし。明示的にインスタンス化したいと思います。私は書くことができます(たとえば for T
= int
):
しかし、私は本当にその長い宣言をコピーしたくありません。次のようなことを言えたらよかったのに。
その後:
現在、最初の行はコンパイルされますが (GCC 4.9.3)、2 行目はコンパイルされません。どうにかして動作させることはできますか?またはdecltype()
、インスタンス化の宣言をコピーしないようにするために、他の方法を使用できますか?
注:引数だけからは型を推測できない例を意図的に使用しました。これは、どのソリューションでもこのケースをサポートする必要があるためです。
c++ - G++ で生成されないいくつかの明示的なインスタンス化
言語ごとに「プロセッサ」タイプを持つ、いくつかの異なるタイプのバイナリ「言語」を処理するライブラリを構築しています。ライブラリは正常にビルドされます。これまでのところ、問題を次のテンプレート コードに絞り込みました。
私はそれがサポートする数十の異なるクラスを持っており、私のライブラリには明示的なインスタンス化の長いリストがあります:
ライブラリにリンクするアプリケーションをビルドしようとすると、.NET 経由g++ -Wall -std=c++11
でコンパイルすると次のエラーが発生しますが、Visual Studio 2015 でのビルドでは問題は発生しません。
Linux でビルドするときに、明示的なインスタンス化が完全に生成されていないかのようです。ライブラリで明示的にインスタンス化しようとしました:
これは、明示的なインスタンス化が重複しているため、ライブラリのビルドに失敗するだけです。
この問題が Linux ビルドでのみ発生する原因は何ですか?
ありがとうございました。
c++ - 明示的なテンプレートのインスタンス化構文
明示的なインスタンス化宣言には「class」キーワードが必要ですか?
c++ - C++: 明示的なインスタンス化とは
私は本 C++ 入門書第 5 版を読んでいて、これを手に入れました。
テンプレートの使用時にインスタンス化が生成されるという事実 (§ 16.1.1、p. 656) は、同じインスタンス化が複数のオブジェクト ファイルに表示される可能性があることを意味します。別々にコンパイルされた 2 つ以上のソース ファイルが同じテンプレート引数で同じテンプレートを使用する場合、それらの各ファイルにそのテンプレートのインスタンス化があります。
私はそれが正しく得られたかどうかわからないので、ここに例を作りました:
上記の段落によると、この例では、Test_tpl がTest_tpl<int>
2 回インスタンス化されています。明示的なインスタンス化を使用する場合、Test_tpl<int>
一度だけインスタンス化する必要がありますが、この例でこの手法を使用する方法がわかりません。
c++ - 変換演算子による明示的にインスタンス化されたテンプレート関数の呼び出し
次のような明示的なインスタンス化の助けを借りて、cpp ファイルに実装されている関数テンプレートがあるとします。
関数.h
関数.cpp
次のように、 function.hを含むメイン ファイルで関数を呼び出すことができるようになりました。
さらに、次のように実装されたクラスがあると仮定します。
data.h
次のコードでは、リンカー エラー LNK2019: unresolved external (Visual Studio 2010) が発生します。
次の式のいずれかを使用して、 to function()を指定できます。
しかし、 function(a)を単に呼び出すことができないのはなぜですか? function()をデータ型で明示的にインスタンス化せずにそれを達成するための他の解決策はありますか?
c++ - 明示的なインスタンス化で生成されないデフォルトのコンストラクター
C++ が明示的なテンプレート インスタンスでデフォルトの ctor の生成を抑制しているように見える理由がわかりません。このソース ファイルの場合、
オブジェクト ファイルには明示的な ctor が含まれていますが、デフォルトのデフォルトおよびコピー ctor は含まれていません。
ただし、これら 2 つの ctor を自分で書き出すと、
これらはオブジェクト ファイルに表示されます。
gcc 5.3.1 (Linux) および clang-700.1.81 (OS/X) でテスト済み。どうしてこれなの?
c++ - C++でデフォルトのテンプレート引数を使用してクラスを明示的にインスタンス化する方法は?
タイプと非タイプ (デフォルト) のテンプレート パラメータを持つクラスがあります。非型パラメータは組み合わせることができ、次の方法でインスタンス化できます。
クラスTNT
には型パラメーターがあり、残りはデフォルトです。cpp ファイルでそのようなクラスを明示的にインスタンス化する正しい方法は何ですか? 非型パラメータは組み合わせることができるので、多くの組み合わせが可能です。