如何在不同模板类的模板类中使用嵌套模板类

时间:2013-09-03 05:55:24

标签: c++ templates

首先,我希望问题标题在某种程度上有意义。

我有以下类结构:

class A : public Singleton<A>
{
public:
    template <typename T> class Buffer
    {
    public:
         //ctor & dtor
         T* get() { return ptr; }
    private:
         T* ptr;
    };

    // class A stuff
};

此类应作为模板参数传递给处理程序类,并在类的模板函数中使用:

template <class MODEL> class Handler
{
public:
      // ctor & dtor
      template <typename T> typename MODEL::Buffer<T>* create(...) // error c2988
      { // create a buffer }
};

然而,编译器无法确定正确的类型名称并抛出错误C2988:无法识别的模板声明/定义(VS 2012中的vc ++ 2012年11月CTP编译器)。我找不到任何解决方案来告诉编译器如何处理内部类模板。所以问题是:如何使这项工作?

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:3)

您需要帮助编译器消除歧义并告诉它Buffer是什么:

template <typename T> typename MODEL::template Buffer<T>* create(...);
//                                    ^^^^^^^^

有关详细信息,请参阅this Q&A