templates – 根据模板参数选择参数类型
发布时间:2020-12-16 07:16:26 所属栏目:百科 来源:网络整理
导读:我正在编写一个C 11模板函数void foo(T,U),它有两个参数: 第一个参数可以是A1类型或B1类型. 如果第一个参数是A1类型,则第二个参数是A2类型; 如果第一个参数是B1类型,则第二个参数是B2类型; 由于第二个参数取决于第一个参数,有没有办法编写这个函数只需要一
我正在编写一个C 11模板函数void foo(T,U),它有两个参数:
第一个参数可以是A1类型或B1类型. 由于第二个参数取决于第一个参数,有没有办法编写这个函数只需要一个模板参数? 沿途的东西 template class <T> void foo(T t,std::conditional<A1* tmp = dynamic_cast<T*>(&t),A2,B2>::type); 可能会工作,但它的丑陋和需要RTTI. 有没有一个很好的方法来实现这一目标? 解决方法
是的,它可以在没有RTTI的情况下完成.如何做到最好取决于A1和A2如何相关.
如果您控制类,则可以在A1中添加using或typedef class A1 { using RelatedType = A2; } 和B1和B2类似 然后 template class <T> void foo(T t,T::RelatedType t2); 如果您无法编辑A1,则可以创建类型特征 template<typename T> struct TypeRelation // would have a better name if we knew why they were related { // can put a default related type here if you want } 然后使用模板专业化(例如As,但需要类似于Bs) template<> struct TypeRelation<A1> { using RelatedType = A2; } 然后声明变成了 template class <T> void foo(T t,typename TypeRelation<T>::RelatedType t2); C 11s decltype也可能是合适的,取决于类如何相关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |