模板化类中没有名为X的类模板
No class template named X in templated class
当试图用GCC 4.6.0编译这个(类似crtp的)代码时:
template<template<class> class T> struct A;
template<class T>
struct B: A<B<T>::template X> {
template <class U> struct X { U mem; };
};
B<int> a;
我得到错误消息"test.cpp:3:26: error:在' struct B
正如Emile Cormier在这里正确指出的那样,问题是在A
实例化的地方,B
仍然是一个不完整的类型,并且您不能使用内部模板。
解决方法是将模板X
移到模板B
之外。如果它独立于模板B
的特定实例化T
,只需将其移动到命名空间级别,如果它依赖于实例化,您可以使用类型特征:
template <typename T>
struct inner_template
{
template <typename U> class tmpl { U mem; }; // can specialize for particular T's
};
template <typename T>
struct B : A< inner_template<T>::template tmpl >
{
};
当您指定
A<B<T>::template X>
作为基类时, struct B
仍然被认为是不完整类型。
您正在尝试使用B
的成员作为B
的父级创建递归式情况。例如,这也不能编译:
template<template<class> class T> struct A {};
struct B : public A<B::nested>
{
struct nested {};
};
相关文章:
- 没有找到相关文章