問題タブ [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++ - 基本テンプレート クラスを明示的にインスタンス化する方法は?
この質問は、テンプレート クラスの明示的なインスタンス化を検討しています。
B<T>
別のテンプレート クラスから派生したテンプレート クラスを考えてみましょうA<T>
。そのメソッドは動的リンクから呼び出されるため、明示的にインスタンス化したいB<T>
ので、コード自体では呼び出されませんが、メソッドをインスタンス化する必要があります。もちろん、から継承されたメソッドもA<T>
呼び出されるため、それらもインスタンス化する必要があります。
この質問で尋ねられるように、テンプレート クラスを明示的にインスタンス化する場合、C++ は基本クラスをインスタンス化しないようです: Do Explicit Instantiations of C++ Class Templates Instantiate Dependent Base Classes? 例:
もちろん、すべての基本クラスをインスタンス化する必要もあります。ただし、クラス階層が非常に深い可能性があるため、これでクライアント コードに負担をかけたくありません。10 個以上のテンプレート クラスを含むクラス階層を考えてみましょう。クライアントは、10 個の明示的なテンプレート インスタンス化を作成するように促されるべきではありません。これはたくさん書いているだけではありません。また、クラス階層に変更を加えると壊れます。
代わりに、インスタンス化されるたびB<T>
に、そのすべての基本クラスもインスタンス化されるようにしたいと考えています。次のように、B自体で基本クラスを単純にインスタンス化してみました。
しかし、これはコンパイルされません。これを達成できる他の方法はありますか?
c++ - MSVC でのテンプレートの静的定義と明示的な特殊化のインスタンス化エラー
次のコードが gcc で問題なく動作する理由が気になります
MSVC 2012ではコンパイルできません:
n3242 §14.7 5 で読んだことから
明示的なインスタンス化と明示的な特殊化の宣言の両方が、明示的なインスタンス化が明示的な特殊化の宣言に続く場合を除き、プログラムに現れてはなりません。
そして私はこれが事実だと信じています。何か不足していますか?
c++ - g++-nvcc 境界 (カーネルを含む) を越えた関数テンプレート コードの使用
NVIDIA CUDA の nvcc コンパイラで以下をコンパイルするとします。
今、私は自分のgcc、nvcc以外のコードを呼び出す必要がありますfoo()
:
CUDA でコンパイルした .o/.a/.so ファイルに適切な (?) インスタンス化があります。
私はそれを実現できますか?