在自身内部创建模板类的 std 容器
Posted
技术标签:
【中文标题】在自身内部创建模板类的 std 容器【英文标题】:create a std container of template class within itself 【发布时间】:2016-06-05 19:04:24 【问题描述】:我有以下类模板的继承层次结构:
#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 > > >
;
我正在尝试为我当前定义的类创建一个标准容器。这可能吗?如果这不是一个类模板,我可以做一个前向声明,但是既然它是一个模板,这有可能吗?
【问题讨论】:
"Problem :(" 不是一个有效的问题,也不是一个实际的问题描述。P.S. 修复你的赋值运算符。在许多用例中,它会导致未定义的行为。Object
不是模板。
它实际上是用clang编译的:melpon.org/wandbox/permlink/BfBEnLjY16Oa6EZ5
g++: try.cc:13:5: error: ‘Data<T>::data’ has incomplete type
因为它认为 Object
在这一点上是不完整的。
好吧,其实问题出在Data
【参考方案1】:
对于std::unordered_map < std::string, Data < Object > >
Object
是一个不完整的类型
您可以改用指向Object
的指针:
class Object : public Data < std::unordered_map < std::string, Object* >>
;
【讨论】:
以上是关于在自身内部创建模板类的 std 容器的主要内容,如果未能解决你的问题,请参考以下文章
模板类的树,其中 chilldren 是 std::array of std::unique_ptr
ATL 容器的包装器,以便它们可以与 std:: 容器模板一起使用?