假设在下面的代码中,意图是允许T
inBar<T>
是 a Foo<U>
for any U
。
template<typename U>
class Foo { };
template<typename T, typename = std::enable_if_t< /*T is Foo<U> for any U*/>>
class Bar {
// ...
};
有什么我可以替换/*T is Foo<U> for any U*/
的吗?
您可以编写一个通用特征来匹配任何专业化:
template <typename T, template <typename...> class Z>
struct is_specialization_of : std::false_type { };
template <typename... Args, template <typename....> class Z>
struct is_specialization_of<Z<Args...>, Z> : std::true_type { };
在您的具体情况下,这将是:
is_specialization_of<T, Foo>::value // <== T is some kind of Foo
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句