Templates 如何让Eclipse对模板参数进行假设?

Templates 如何让Eclipse对模板参数进行假设?,templates,ide,eclipse-cdt,indexer,Templates,Ide,Eclipse Cdt,Indexer,我有 模板类Foo:public T{/*…*/} 我只是用Ts来实例化它,它们是Bar的子类。如果有帮助的话,我可以断言情况就是这样 因此,EclipseCDT不承认t“实际上”也是一个条。我不能对此抱怨,但我能让它明白吗?也就是说,我可以告诉索引器在类Bar中查找方法和类型作为Foo的基类吗?这是一个非常好的问题 目前,没有办法告诉Eclipse模板将只使用特定类型的子类参数进行实例化 但是,有一个即将到来的C++语言特性,它允许你在代码中表达这种关系,并且Eclipse也会对它进行理解:

我有

模板类Foo:public T{/*…*/}
我只是用
T
s来实例化它,它们是
Bar
的子类。如果有帮助的话,我可以断言情况就是这样


因此,EclipseCDT不承认t“实际上”也是一个
。我不能对此抱怨,但我能让它明白吗?也就是说,我可以告诉索引器在类
Bar
中查找方法和类型作为
Foo
的基类吗?

这是一个非常好的问题

目前,没有办法告诉Eclipse模板将只使用特定类型的子类参数进行实例化

但是,有一个即将到来的C++语言特性,它允许你在代码中表达这种关系,并且Eclipse也会对它进行理解:<强> >/P> 概念允许您约束模板参数,以便它们必须满足概念,该概念可以被视为类型谓词-编译时计算的类型上的布尔函数

例如,您可以编写如下概念:

template <typename T> class Foo : public T { /* ... */ }
注意使用
DerivedFromBar
而不是通常的
typename
来声明模板参数
T
。这告诉编译器
T
被约束为满足
DerivedFromBar

一旦您以这种方式表达了代码,原则上,Eclipse可以做出推断,允许它在模板内调用类型为
T
的对象时,将
Bar
的成员作为自动完成建议

概念目前由支持,其他编译器(如MSVC和clang)正在实施它

跟踪EclipseCDT中的概念支持。利用概念更好地自动完成将是一个后续功能

template <typename T>
concept bool DerivedFromBar = std::is_base_of<Bar, T>::value;
template <DerivedFromBar T> class Foo : public T { /* ... */ }