This code:
template <template <typename> class T>
class A
{
};
template <typename T>
class B
{
A<B> x;
};
doesn't compile, I suppose since A<B>
is interpreted as A<B<T> >
within B
's scope.
So, how do you pass B
as a template template parameter within it's scope?
Try this:
template <typename T>
class B
{
A< ::B > x; // fully qualified name for B
};
According to C++ Standard 14.6.1/2 you should use the normal name of the template (i.e., the name from the enclosing scope, not the injected-class-name).
来源:https://stackoverflow.com/questions/3052415/template-class-that-refers-to-itself-as-a-template-template-parameter