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 { /* ... */ }