2

首先,我希望问题标题有某种意义。

我有以下类结构:

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++ Nov 2012 CTP 编译器)。我找不到任何解决方案来告诉编译器如何处理内部类模板。所以问题是:如何做到这一点?

任何帮助将不胜感激。

4

1 回答 1

3

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

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

有关更多信息,请参阅此问答

于 2013-09-03T06:07:46.073 回答