Reputation: 183
There is a class template A
, which is taking template class for its template parameter.
template <typename T> class A {}
template <typename T> class B {}
int main()
{
A<B<int>>();
return 0;
}
Can class template A
deduces its template parameter(B
int)'s template parameter(int)?
Or is there the other way to solve this problem? For example,
template <typename T<typename U>> class A {}
Upvotes: 2
Views: 1321
Reputation: 275878
template<class>struct inner{};
template<template<class...>class Z, class T, class...Ts>
struct inner<Z<T, Ts...>>{
using type=T;
};
template<class Z>
using inner_t=typename inner<Z>::type;
and inner_t<X>
is the first template argument of X
if it exists, and a substitution failure otherwise.
Upvotes: 5
Reputation: 65770
You can make A
a template template:
template <template <typename> class T, typename Inner>
class A<T<Inner>> {};
Upvotes: 5
Reputation: 5249
What you described is a template template:
template< template<typename> class T > class A {};
note the class before T has to be class, not typename.
Upvotes: 1