我可以确认类模板特化吗?
在软件开发中,我们经常需要确定给定的类是否由于类模板而特化。考虑以下场景:
问题:
给定一个像
template <class T> struct A {};
这样的类模板,是否可以确定 CompareT 是否是 A
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*> , CompareT >::value; // A<> ???? } int main(){ compare< A<int> >(); }
在此用例中,A
解决方案:
下面的代码允许您验证一个类是否是模板:
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,您可以识别一个类是否是模板专业化,从而使您能够更好地控制代码的结构和行为。
以上是我可以确定一个类是否是类模板的特化吗?的详细内容。更多信息请关注PHP中文网其他相关文章!