c – 在boost :: any的map中插入元素并返回对它的引用
我有一个存储许多实体的类.我希望能够添加和删除为每个实体存储的任意(命名)属性.
我用这个地图来存储属性: std::map<std::string,boost::any> m_properties; 为了添加属性,我添加了一个MyProperty< T>的实例.到物业地图. myProperty的< T>为我的每个m_size实体存储类型为T的属性. template <class T> MyProperty<T>& addProperty(const std::string& name,const T& defaultValue = T()) { assert(!m_properties.count(name)); m_properties[name] = MyProperty<T>(m_size,defaultValue); return boost::any_cast<MyProperty<T>&>(m_properties[name]); } 这是有效的,但对我来说,似乎很麻烦,我必须创建一个MyProperty< T>的实例,忘记它的类型,然后把它放回到下一行. 是否有更好,更直接的方法将属性插入到地图中并返回对它的引用? 我想避免尽可能多地复制MyProperty实例,因为它包含大量数据. 编辑:看起来我对问题的焦点不够清楚.我并不担心演员的表现,因为在我的用例中,我只会添加一些属性.但是,我在寻找编码风格方面的“更好”的解决方案,因为我总是试图为手头的任务找到最简单,最优雅的解决方案. 解决方法
如果你不想忘记类型,你不应该使用boost :: any,因为boost :: any确实只有这样:擦除接口的类型. 您可以考虑使用boost :: variant(尽管它需要另外一组设计权衡) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |