我试图创建一个具有里面一个未定义类CRTP类的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)。我想要专门做的唯一事情就是内部类的定义。
您能否更详细地描述您为什么使用CRTP?你想创建一个'std :: unique_ptr'你可以在哪里传递'T'?我不明白内部课堂的必要性。 –
TemplateRex
2012-07-25 06:24:37
基本上,我试图让它有一个不同的内部类,这里有一个通用接口,在这种情况下派生类(TestClass)可以访问。一个可能更好的比较是像pimpl设置,其中内部包含该类的实际私人工作。 – Kozaki 2012-07-25 17:32:56