【发布时间】:2023-04-02 14:50:01
【问题描述】:
当谈到属性列表时,我指的是一个通用列表,它存储了一个类的附加信息。
最简单的情况:
一个类有一个std::map<std::string, std::string>。第一个字符串命名属性(如"Color"),第二个字符串描述值(如"Yellow")。
在此示例中,使用这些属性的另一个类需要检查映射中是否存在某个属性名称,然后解析该值。
然而,在谈论性能时,这并不是最好的概念。
您将如何实现这样的属性列表?
是否有任何设计模式或库可以做类似的事情?
我对 C++ 方式特别感兴趣,但如果有独立于语言的解决方案,请也发布它们。
属性列表可以用于类需要具有动态属性并且用户不想为每个属性继承的情况。
如果这有帮助,您可以查看我与该主题相关的其他问题:
Attributelists or inheritance jungle?
编辑:
当然我忘记了一些信息(感谢 cmets):
这些属性可以应用于对象。同一类的对象可能有不同的属性。对象具有的属性可以更改(值可以更改,可能添加/删除属性)
希望这能澄清一点。
【问题讨论】:
-
这些“属性”是每个类还是每个对象?属性是否有可能在运行时发生变化?你打算如何使用属性?这是一个有趣的问题,但您没有详细说明属性列表的要求。
-
在 silico 上是对的 - 您可以根据您的实际要求来设计它,包括运行时灵活性、内存使用、性能等。它可能是 enums/strings/ints/boost::any 的映射来提升: :any、变体、抽象基类等,或者如果您认为您之前关于在此类“属性列表”和继承之间进行选择的问题是相关的,那么它意味着要求更加模糊。
标签: c++ design-patterns class-design