在 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
解决方案:
要实现此目的,我们可以利用名为 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 {};
此元函数返回 true如果 T 是 Template 的特化,否则为 false。说明其用法:
static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
以上是如何确定 C 中的模板专业化?的详细内容。更多信息请关注PHP中文网其他相关文章!