これは本当に良い質問です!
現在、テンプレートには特定の型のサブクラスである引数のみがインスタンス化されることをEclipseに知らせる方法はありません。
しかし、あなたのコードでこの関係を表現できるようになるC++言語機能もあります。Conceptsも同様です。コンパイル時に評価タイプのブール関数、 -
概念は、彼らがタイプ述語と考えることができ概念を、満足しなければならないような制約テンプレートパラメータにあなたを可能にします。これが唯一のBar
から派生しているタイプで満足している概念DerivedFromBar
を定義
template <typename T>
concept bool DerivedFromBar = std::is_base_of<Bar, T>::value;
:
はたとえば、次のようなコンセプトを書くことができます。
次に、あなたのクラステンプレートの定義では、この概念を使用することができます。
template <DerivedFromBar T> class Foo : public T { /* ... */ }
は、テンプレートパラメータT
を宣言する代わりに、通常のtypename
のDerivedFromBar
の使用に注意してください。これはT
はDerivedFromBar
を満たすように制約されているコンパイラに指示します。
このようにコードを記述すると、テンプレートの中にタイプT
というオブジェクトのメソッドを呼び出すときに、EclipseはBar
のメンバーに自動補完提案を提供することを可能にする推論を原理的に行うことができます。
概念は、現在、MSVCと打ち鳴らすが、それを実装する上で作業など、他のコンパイラで、GCCによってサポートされています。
Bug 492682トラックの概念は、Eclipse CDTでサポートされています。より良い自動補完のためのコンセプトを活用することは、フォローアップ機能になります。