首先,我希望问题标题在某种程度上有意义。
我有以下类结构:
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编译器)。我找不到任何解决方案来告诉编译器如何处理内部类模板。所以问题是:如何使这项工作?
任何帮助都将非常感激。
答案 0 :(得分:3)
您需要帮助编译器消除歧义并告诉它Buffer
是什么:
template <typename T> typename MODEL::template Buffer<T>* create(...);
// ^^^^^^^^
有关详细信息,请参阅this Q&A。