容器结构,用于包含作为标识符的类
Container structure for class containing a class acting as an identifier
对于以下一组类
class Identifier; // can be used as a key
class Data;
class MoreData;
class Object {
Identifier id_;
Data data_;
MoreData moreData_;
};
对于Object
类数据库的数据存储,什么是好的设计?有试过
std::set<Object>
这保持了Object类抽象的封装,但是使用Identifier
成员进行操作(例如,查找、插入等)的行为是笨拙的。有试过
std::map<Identifier, std::pair<Data, MoreData>>
使用Identifier作为键的语义要自然得多,但这破坏了Object类的封装,操作需要从各个部分构造Object实例。
这里是否有更好的选择,不受上述方法的任何缺点的影响(或减轻它们)?没有什么是一成不变的,所以重构对象或添加方法等都是值得赞赏的回应。如果没有更好的标准,Boost也可以。
您可能想看看Boost。Multi-Index,允许指定Object::id_
作为键。比如:
boost::multi_index_container<
Object,
boost::multi_index::indexed_by<
boost::multi_index::ordered_unique<
boost::multi_index::member<Object, Identifier, &Object::id_>
>
>
>;
相关文章:
- 如何导出包含具有"std::unique_ptr"值的"std::map"属性的
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 编译包含字符串的代码时遇到问题
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- c++库的公共头文件中应该包含什么
- 将包含C样式数组的对象初始化为成员变量(C++)
- 是否需要删除包含对象的"pair"?
- #ifdef和未声明的标识符
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 我收到未声明的标识符错误,但我已包含头文件?
- 如果当标识符的库未直接包含在源中时,是否可以强制视觉工作室抛出错误?
- 错误:'cout':未声明的标识符;虽然我已经在程序中包含了iostream头文件
- C2061 错误:"标识符",但我包含标头?
- 错误:标识符"cout"未定义。<iostream> 包含并使用命名空间 std;
- 在编译时创建一个标识符,其中包含行号作为标识符的一部分
- 错误:标识符 tgamma 在 c++ 中未定义,尽管包含 <math.h>
- 标识符在包含头之后使用未定义的类
- 错误 C2061:语法错误:标识符,但已包含头文件
- 容器结构,用于包含作为标识符的类