提问人:mgampi 提问时间:12/15/2022 更新时间:12/15/2022 访问量:40
如何:包含其基类派生对象的容器的模板类
How to: Template class that contains container of it's base class derived objects
问:
我想建立一个模板类模型,该模型的结构是存在一个基本模板,而基模板又将作为 std::unordered_map 中的对象存储在派生模板类中。 每个对象都有一个唯一的键,该键可以是不同的数据类型(POD、struct 等)。 我不知道如何告诉派生的容器类将传递的子类的键类型用于unordered_map的键。具体而言,如果对象是从基类派生的,然后由于专用化而不再是模板类。
到目前为止,我做了什么:
** // The base class**
template <typename IDType> class XRObject {
public:
XRObject() : ID_() {
}
XRObject( const IDType& id) :
ID_(id){
}
XRObject(const XRObject& other) : ID_(other.ID_)
{
}
virtual ~XRObject() = default;
IDType getID() const {
return ID_;
}
void setID(const IDType& id) {
ID_= id;
};
private:
IDType ID_;
};
// The derived container class
template <class IDType=long, class T=XRObject> class XRObjectContainer : public XRObject<IDType> {
public:
using ptr_type = typename std::shared_ptr<T>;
using container_type = typename std::unordered_map<**IDType of class T**, ptr_type>;
using iterator = typename container_type::iterator;
using const_iterator = typename container_type::const_iterator;
using sorted_containter_type = typename std::multimap<std::wstring, **IDType of class T**>;
using sorted_iterator = typename sorted_containter_type::const_iterator;
XRObjectContainer() : XRObject<IDType>() {
}
XRObjectContainer(IDType id) {
}
XRObjectContainer(const XRObjectContainer& rhs) : XRObject<IDType>(rhs) {
}
protected:
container_type children_;
sorted_containter_type sortedbyname_;
};
// Concrete class specialisation
class XRUnit : public XRObject {
public:
XRUnit::XRUnit() : XRObjectContainer<long, XRUnit>(), Factor_(0.0, true) {
}
XRUnit::XRUnit(long id, double Factor) : XRObjectContainer<long, XRUnit>(id),
Factor_(Factor) {
}
private:
XRValue<double> Factor_;
};
// The final container class using XRUnit as data members of the internal unordered_map container
class XRUnits : public XRObjectContainer<std::string, XRUnit> {
public:
XRUnits::XRUnits() : XRObjectContainer<std::string, XRUnit>() {
}
XRUnits::XRUnits(const std::string& ID) : XRObjectContainer<std::string, XRUnit>(ID) {
}
};
我不知道如何让编译器自动确定类 XRUnit 的 IDType 并在模板类 XRUnits 中用作其 std::unordered_map 成员的键类型?XRObjectType 派生类的 IDType 从包含的unordered_map元素 IDType 的 IDType 延迟。
答: 暂无答案
上一个:如何使此运算符重载工作?
下一个:模板函数参数不完整类型 c++
评论