c++ - 包含充当标识符的类的类的容器结构

标签 c++ design-patterns c++11

对于下面的一组类

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.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_>
        >   
    >   
>;

关于c++ - 包含充当标识符的类的类的容器结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22695176/

相关文章:

c++ - 这种设计是标准设计模式之一吗?

c++ - 初始化后来自 valarray<int> 的错误值

c++ - 为什么我要在这种情况下使用智能指针?

c++ - VS2008 链接到错误的 boost 库

c++ - C/C++ 中结构的 `new` 和 `new()` 有什么区别?

c++ - 覆盖 C++ 中的非虚继承

java - 如何实现算法库?

c# - 将模型与 View 模型分开有什么意义? (MVVM)

C++11 删除类类型?

c++ - 对于可移动类型,按值传递比重载函数更好吗?