识别模板特化
在 C 中,有时需要确定给定的类是否是特定类模板的特化。例如,考虑以下类模板:
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>{}, "");
此解决方案提供了一种便捷的方法来检查给定类型是否确实是特定类模板的特化。
以上是如何确定一个类是否是 C 中类模板的特化?的详细内容。更多信息请关注PHP中文网其他相关文章!