template<class A>struct is_derived_from_vector { static const bool value = ????;};
如何在编译时测试B类是否来自模板系列?
template<class A,template< class > class Family>struct is_derived_from_template { static const bool value = ????;};
使用:
template<class T> struct X {};struct A : X<int> {}struct B : std::vector<char> {}struct D : X<D> {}int main() { std::cout << is_derived_from_template<A,X>::value << std::endl; // true std::cout << is_derived_from_template<D,X>::value << std::endl; // true std::cout << is_derived_from_vector<A>::value << std::endl; // false std::cout << is_derived_from_vector<B>::value << std::endl; // true}解决方法 试试这个:
#include <type_traits>template <typename T,template <typename> class Tmpl> // #1 see notestruct is_derived{ typedef char yes[1]; typedef char no[2]; static no & test(...); template <typename U> static yes & test(Tmpl<U> const &); static bool const value = sizeof(test(std::declval<T>())) == sizeof(yes);};
用法:
#include <iostream>template<class T> struct X {};struct A : X<int> {};int main(){ std::cout << is_derived<A,X>::value << std::endl; std::cout << is_derived<int,X>::value << std::endl;}
注意:在标记为#1的行中,您还可以使您的特征接受任何具有至少一个但可能更多类型参数的模板:writint:
template <typename,typename...> class Tmpl总结
以上是内存溢出为你收集整理的c – 如何测试B类是否来自模板族类全部内容,希望文章能够帮你解决c – 如何测试B类是否来自模板族类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)