从Boost :: Interprocess中删除RTTI

我正在尝试使用Boost :: Interprocess来共享内存。 但是,我的程序也需要使用LLVM,并且LLVM需要fno-rtti,而Boost :: Interprocess需要RTTI。 具体来说,我在这里尝试了第一个例子,并且遇到了编译错误:

/usr/include/boost/interprocess/detail/in_place_interface.hpp:50:71:error:can not use typeid with -fno-rtti:in_place_interface(:: boost :: alignment_of :: value,sizeof(T),typeid(T )。名称())

我的解决方案是浏览Boost :: Interprocess标题,并用字符串常量"sometype"替换每个typeid().name() 。 这个例子现在编译并运行良好(据我所知)。 我很难理解的印象是,Boost :: Interprocess使用typenames来索引地图,作为优化加速查找。 根据我对此不甚了解的印象,将所有类型名称更改为不变将会导致性能损失,但不会影响正确性。

如果我不从Boost :: Interprocess中删除RTTI,我将被迫使用其他一些进程库,因为这个页面没有给我很多希望混合RTTI和no-RTTI。

这是替代,在Boost :: Interprocess标头中通过用常量字符串替换typeid来破坏RTTI,好吗? 我担心不正确的行为,比如Boost使用typeid来确定调用哪个析构函数,或者其他类似的问题。 我正在使用单一开发者,单一用途的虚拟机。

链接地址: http://www.djcxy.com/p/50975.html

上一篇: Removing RTTI from Boost::Interprocess

下一篇: boost interprocess error in boost interprocess containers