C++ 如何定义模板的模板化子类?

C++ 如何定义模板的模板化子类?,c++,C++,我刚刚从4.7更新到GCC 4.8.2,现在收到以下代码的警告: template <class T_base> class factory { private: template <class T> struct allocator : factory { // ^ warning: invalid use of incomplete type 'class factory<T_base>' }

我刚刚从4.7更新到GCC 4.8.2,现在收到以下代码的警告:

template <class T_base>
class factory {
private:
    template <class T>
    struct allocator : factory {
                    // ^ warning: invalid use of incomplete type 'class factory<T_base>'
    };
};

我做错了什么?上述构造是否有避免警告和错误的语法?

声明嵌套模板的正确语法是有两个单独的模板参数列表:

template <class T_base>
template <class T>
struct factory<T_base>::allocator : factory<T_base> {
};

但是,我怀疑这段代码的语义是什么。

声明嵌套模板的正确语法是有两个单独的模板参数列表:

template <class T_base>
template <class T>
struct factory<T_base>::allocator : factory<T_base> {
};

但是,我怀疑这段代码的语义是什么。

您需要这样拼写:

template <class T_base>
template <class T>
struct factory<T_base>::allocator : factory<T_base>
{
    // ...
};

您需要这样拼写:

template <class T_base>
template <class T>
struct factory<T_base>::allocator : factory<T_base>
{
    // ...
};

@KerrekSB没关系,这是一个复制粘贴错误。我已经更正了。@KerrekSB没关系,这是一个复制粘贴错误。我已经改正了。现在我知道需要什么了,这是有道理的:谢谢!工厂不是嵌套类型名称或上下文中的任何名称,这有点令人恼火>。现在我知道需要什么了,这才有意义:谢谢!在这个上下文中,工厂不是嵌套类型名或其他任何名称,这有点令人恼火>。