微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何创建一个接受任何模板作为模板参数的函数?

如何解决如何创建一个接受任何模板作为模板参数的函数?

我需要确定一个类型是否是模板。为此,我想我会使用两个函数重载,如下所示:

template <typename T> // If T is a simple type this overload will be selected
consteval bool istemplate(int) {
   return false;
}
template <template <class...> class T> // This overload will be selected if T is a template and fits in as a template template parameter
consteval bool istemplate(char) { // Dummy char parameter to avoid redeFinition
   return true;
}

然而,当 T 是带有非类型模板参数的模板时,这不起作用,例如:

template <int N>
struct T {};
auto x = istemplate<T>(0); // Error,second overload does not work

如何让第二个重载接受任何模板? (或者任何检测类型是否为模板的替代解决方案都是受欢迎的:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。