在C ++中执行以下操作是个好主意:
typedef std::map<std::string, boost::any> MyVals;
// Is the following typedef'd type inside a map a good idea?
typedef std::map<std::string, MyVals> TagValues;
这些地图将用于顺序插入和删除。
答案 0 :(得分:7)
在typedefing代码中常用的类型中没有什么不好。
Typedef仅存在于语法层面,它们不会对生成的代码进行任何更改。此外,精心挑选的名称将使可读性更好。
比较
std::map<std::string, std::map<std::string, boost::any>::const_iterator it =
tagValues.find(x);
VS
TagValue::const_iterator it = tagValues.find(x);
答案 1 :(得分:3)
使用typedef
没有问题。事实上,好的,以防您以后需要更换底层容器。
嵌套map
始终关注我的一件事是确保密钥和值的复制结构有效,或者使用单实例存储(例如shared_ptr
)来避免这种情况。特别是如果你进行大量的插入/移除,家务管理的成本可能很高。
答案 2 :(得分:1)
如果您希望以后能够轻松更改MyVals
的类型,那么这是完全有效的,通常也是个好主意。在我看来,从我听到/看过/读过的内容来看,这正是typedef的用途。
但是,这是需要注意的事项,您需要确保永远不会将typedef更改为std::map
中无法合法使用的内容。如果你这样做,你会遇到一些问题,追踪问题的位置可能会有点痛苦。
答案 3 :(得分:1)
你看到了什么坏事?我肯定会输入任何长期打字的东西......
答案 4 :(得分:1)
没问题。
STL类定义可能很快变得复杂,因此使用typedef定义集合,迭代器等通常很有用。
答案 5 :(得分:1)
typedef没什么问题,但如果你说,MyVals将被插入和移除太多,在STL容器中拥有这样的haevy数据类型可能会因为涉及赋值运算符而变慢。我会考虑在boost :: shared_ptr中包装MyVals。