例如,我需要将一组对象写入文件,为此我必须使用一个或另一个代表NodeConstructor. 一般来说,我做了一个功能:
virtual NodeConstructor<Node> *NodeConstructor::nodeConstructor(const Node *child) const = 0;
它应该将每个对象(根据其类)与一个或另一个匹配NodeConstructor以记录其字段。在我的特殊情况下,我暂时不使用RTTI,因为每个子对象都有一个所谓的“角色”(我不会停止它是什么,但直观地说,我认为它是可以理解的),我可以匹配相应的NodeConstructor. 但是在一般情况下,当没有这样的“角色”或任何其他标识符时呢?
我的想法是使用typeid每个对象并比较它们。但是我记得,老派教说使用RTTI它不是一个好习惯,他们说,它会消耗很多资源,有必要单独启用该选项,通常是设计不佳的标志。
C++11 及更高版本的新学校对此有何看法?毕竟,据我了解,使用auto已经暗示包含 RTTI,并且auto现在在 C++ 1x 中使用被认为是好的做法。从我找到的信息来看,资源的消耗取决于编译器。并且为了连载的目的,使用typeid还不错的设计,即“按计划”。我想看看你对此事的反对意见和判断?
Boost Serialization 意味着使用 RTTI。所以使用 RTTI 进行序列化是可以的。
至于模板,我建议你看看
template specialization. 这是解决根据参数类型选择模板问题的常用方法。