c – 模板部分特化
发布时间:2020-12-16 10:28:57 所属栏目:百科 来源:网络整理
导读:是否有人知道根据下面的规则代码不编译? template class Tstruct B{ typedef T type;};templateclass Tstruct X{};templateclass Tstruct XBT::type*//HERE I'M PARTIALLY SPECIALIZING (WELL,TRYING TO...){}; 请参阅代码中的注释. 解决方法 您认为这会如
是否有人知道根据下面的规则代码不编译?
template <class T> struct B { typedef T type; }; template<class T> struct X { }; template<class T> struct X<B<T>::type*>//HERE I'M PARTIALLY SPECIALIZING (WELL,TRYING TO...) { }; 请参阅代码中的注释. 解决方法
您认为这会如何运作?编译器会查看某个类的某个类是否有类型为typedef“type”的类?
它不会.即使它是一个指针. 请记住,大概你的B模板可能是专门的地方,所以类型并不总是T *,但它不能用逆向工程推断它. 对于那些完全不理解我的答案的人,你要求编译器做的是找到一个类U,这样B :: type就是你作为参数传入的类. class Foo; class Bar; template<> struct B<Foo> { typedef int type; }; template<> struct B<Bar> { typedef int type; }; X<int*> // ambiguous,T is Foo or Bar? 很难确切地知道你为什么要做你想做的事.您可以对所有指针进行部分特化,然后对特定指针进行全面的特化,这可以根据另一个模板实现. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |