我有以下类模板的继承层次结构:
#include <string>
#include <unordered_map>
// Basic class template
template <class T>
class Data
{
public:
~Data();
Data();
protected:
T data;
};
// Works with no problems
class String : public Data <std::string>
{
};
// Works with no problems
class Float : public Data <float>
{
};
// Compilation error
class Object : public Data < std::unordered_map < std::string, Data < Object > > >
{
};
我正在尝试创建一个我目前正在定义的类的std容器。这可能吗?如果这不是一个类模板,我可以做一个前向声明,但因为它是一个模板,这有什么机会吗?
答案 0 :(得分:1)
std::unordered_map < std::string, Data < Object > >
Object
是一个不完整的类型
您可以使用指向Object
的指针代替:
class Object : public Data < std::unordered_map < std::string, Object* >>
{
};