Я хотел бы унифицировать интерфейс для работы как с шаблонами, так и без шаблонов.Есть ли способ определить, зависит ли тип, такой как класс или указатель функции от параметра шаблона?
Например:
struct foo {};
template<typename T> struct bar {};
// This works if the template parameter is provided
template<typename> struct is_templated : false_type {};
template<template<typename...> class Obj, typename...Args>
struct is_templated<Obj<Args...>> : true_type {};
template<typename T> constexpr auto is_templated_v = is_templated<T>::value;
В этом случае is_template_v<foo>
ложно, а is_template_v<bar<int>>
верно, но я не могу просто вывести что-либо с помощью is_template_v<bar>
.В качестве альтернативы, если я определю
template<template<typename...> class>
struct temp_check : true_type {};
, тогда temp_check<bar>
совершенно допустимо, но я не знаю, как я бы аналогично проверил foo
.Что нужно, это что-то вроде этого, если это действительно C ++
template<template<> class A> struct temp_check<A> : false_type {};
Есть ли какой-нибудь механизм, который мог бы проверить оба?