类是模板特化吗?
在 C 中,确定给定类型是否是特定类型的特化可能很有用类模板。例如,考虑以下代码:
template<class T> struct A {}; template<class CompareT> void compare() { // is this A? cout << is_same< A<*> , CompareT >::value << endl; // A<?> ???? }
给定上述代码,我们如何验证 CompareT 是否是 A<>对于某些类型 *?
解决方案:
利用 is_specialization 模板元函数,您可以检查类型是否是类模板的特化。下面是一个示例:
template<class T, template<class...> class Template> struct is_specialization : std::false_type {}; template<template<class...> class Template, class... Args> struct is_specialization<Template<Args...>, Template> : std::true_type {}; static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
在上面的示例中,is_specialization 采用两个参数:T 和 Template。如果T是Template的特化,则is_specialization<T,Template>;是 std::true_type。否则,它是 std::false_type。
以上是类是 C 中的模板特化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!