我在我的应用程序中使用了一个
我正在使用哈希表执行映射:
更重要的是,这是一个好的实践吗?随着应用程序规模的增长,这会增加复杂性吗?或者,还有完全不同的优雅方法吗?
编辑:
可能无法使用`Boost.Any',因为它使用了RTTI。
也不能为所有这些数据结构使用一个基类,因为其中一些是STL容器,比如
关于下面的一个回答中讨论的
std::shared_ptr<void>
来创建一个智能指针,它可以指向许多不同类型的数据结构,如结构体、向量、矩阵等等。我试图做的是将一些名称映射到它们的数据结构。我正在使用哈希表执行映射:
std::unordered_map<std::string, std::shared_ptr<void>>
我能否将 find()
返回的 std::shared_ptr<void>
强制转换回 std::shared_ptr<my_type>
?如果可以,如何实现?更重要的是,这是一个好的实践吗?随着应用程序规模的增长,这会增加复杂性吗?或者,还有完全不同的优雅方法吗?
编辑:
可能无法使用`Boost.Any',因为它使用了RTTI。
也不能为所有这些数据结构使用一个基类,因为其中一些是STL容器,比如
std::vector
。关于下面的一个回答中讨论的
shared_ptr
删除问题,我了解到shared_ptr
执行类型擦除并存储类型信息以知道调用哪个析构函数。
但我对此不是很确定。
map["foo"]
中的类型? - David Rodríguez - dribeasfoo
的类型。 - Bruceboost::variant
这样的变体类型来实现多态,而不是使用void
?boost::variant
是安全且相当高效的,而且你可以轻松地恢复类型信息。 - Chris Beck