【发布时间】:2014-12-16 17:22:28
【问题描述】:
我有一个继承自 unordered_map 的自定义类,如下所示:
class _map : public unordered_map<string, _pointer> {
public:
// STUFF ...
};
假设_pointer 是另一个自定义类,它的作用是帮助我处理指针问题。 _pointers 可以由许多不同的预定义类型构造,例如:
vector<...> v;
_pointer p = _pointer(v);
// p is now a _pointer holding v and vector<...> data
现在,如果我想在我的地图上存储矢量<...>_pointers,我可以这样做:
_map map;
vector<...> v;
map["a_vector"] = _pointer(v);
它有效,但我希望能够这样做:
_map map;
vector<...> v;
map["a_vector"] = v;
并自动将其分配为_pointer(v),可能是通过重载map 分配内容的方式并通过调用特定的_pointer 构造函数来明确告诉它处理vector<...>。
我已经尝试过这样做(通过重载 operator[]、operator=),但我似乎不会去某个地方。任何人都可以建议我实现这种行为的方法吗?
谢谢。
常见问题:
问:为什么在标识符名称上使用 _?你不知道这是不好的做法吗?
A:手头的问题没关系。问:您的代码不是 RAII。
A:那么,什么?问:为什么不使用 unique_ptr/smart_ptr?为什么要直接处理指针?
A:因为我需要,而且这对于手头的问题也没有关系。问:为什么要重载 unordered_map?为什么不使用这个_OTHER_OPTION_?
A:不用了,谢谢,这是我需要做的。
【问题讨论】:
-
在
_pointer上定义一个隐式转换构造函数怎么样? -
谢谢@cdhowie,这听起来像是要走的路,但我不知道该怎么做。
-
等等,如果地图的值类型是
_pointer*,你怎么能做到map["a_vector"] = _pointer(v);?我们可以看到_pointer的示例构造函数吗? -
“你为什么要重载 unordered_map? - 你为什么不使用这个 OTHER_OPTION? - 不,谢谢,这就是我需要做的。”有人不得不说:公开从 stl 容器类派生的唯一有点理智的理由是写一个速写。
-
是您的常见问题解答。从标准容器派生总是一个错误。
标签: c++ operator-overloading overloading unordered-map