我正在尝试创建一个 CRTP 类,其中包含一个未定义的类 --- 由派生类定义,如下所示:
#include <memory> // unique_ptr
template<typename T>
class crtp
{
public:
class inside;
crtp();
std::unique_ptr<inside> m;
};
这适用于非模板数据类型。
但是,如果我尝试将模板类传递给它,例如:
template<>
template<typename T>
class crtp<test::TestClass<T>>::inside
{
public:
inside()
{
std::cout << "Instantiated." << std::endl;
}
};
它给出了以下错误:
error: invalid class name in declaration of ‘class crtp<test::TestClass<T> >::inside’
我正在使用 gcc 4.6.1。
我在这里想念什么?我觉得这与模板的实例化方式有关,但我不确定我应该寻找什么。
编辑:澄清一下,像crtp的构造函数之类的东西已经在别处定义了(我应该发布它吗?它只是初始化unique_ptr)。我唯一需要专门化的是内部类的定义。