Это действительно хороший вопрос!
В настоящее время нет способа сообщить Eclipse, что шаблон будет создан только с аргументами, которые являются подклассами определенного типа.
Однако есть предстоящая C++ язык функция, которая позволит вам выразить эти отношения в вашем коде, и для Eclipse, чтобы поднять на него, а также: Concepts.
понятий позволяют ограничить параметров шаблона таких, что они должны удовлетворять концепции, которую можно рассматривать как тип предикат - булеву функцию по типам, оцененной во время компиляции.
Например, вы можете написать такое понятие, как это:
template <typename T>
concept bool DerivedFromBar = std::is_base_of<Bar, T>::value;
Это определяет концепцию DerivedFromBar
, которая выполняется только по видам, которые являются производными от Bar
.
Вы можете использовать эту концепцию в своем определении шаблона класса:
template <DerivedFromBar T> class Foo : public T { /* ... */ }
Обратите внимание на использование DerivedFromBar
вместо обычного typename
объявить параметр шаблона T
. Это говорит компилятору, что T
ограничено, чтобы удовлетворить DerivedFromBar
.
Как только вы выражаете свой код таким образом, Eclipse может в принципе сделать выводы, которые позволили бы ему предлагать членам Bar
в качестве предложений автозаполнения при вызове метода на объект типа T
внутри шаблона.
Концепции в настоящее время поддерживаются GCC, с другими компиляторами, такими как MSVC и clang, которые работают над его реализацией.
Bug 492682 треков Поддержка концепций в Eclipse CDT. Воспользовавшись концепциями для лучшего автозаполнения, мы будем использовать последующую функцию.