c – 如何测试B类是否来自模板族类

c – 如何测试B类是否来自模板族类,第1张

概述如何在编译时测试B类是否来自std :: vector? template<class A>struct is_derived_from_vector { static const bool value = ????;}; 如何在编译时测试B类是否来自模板系列? template<class A, template< class > class Family>struct is_deri 如何在编译时测试B类是否来自std :: vector?
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类是否来自模板族类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1236778.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存