简体   繁体   中英

Deduce template parameter's template parameter

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 {}
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.

You can make A a template template:

template <template <typename> class T, typename Inner> 
class A<T<Inner>> {};

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM