从Boost::Interprocess中移除RTTI
Removing RTTI from Boost::Interprocess
我正在尝试使用Boost::Interprocess共享内存。但是,我的程序也需要使用LLVM, LLVM需要fno-rtti,而Boost::Interprocess需要RTTI。具体来说,我尝试了这里的第一个示例,并且得到了编译错误:
/usr/include/boost/interprocess/detail/in_place_interface.hpp:50:71: error: cannot use typeid with -fno-rtti: in_place_interface(::boost::alignment_of::value, sizeof(T), typeid(T).name())
我的解决方案是浏览Boost::进程间头并将每个typeid().name()
替换为字符串常量"sometype"
。该示例现在可以很好地编译和运行(据我所知)。我不太理解的印象是Boost::Interprocess使用typennames来索引映射,作为加速查找的优化。在我的印象中,将所有类型名更改为常量会降低性能,但不会影响正确性。
如果我不从Boost::Interprocess中删除RTTI,我将被迫使用其他进程间库,因为这一页没有给我太多混合RTTI和非RTTI的希望。
这是替换,nuking RTTI在Boost::进程间头替换typeid
与常量字符串,好吗?我担心不正确的行为,比如Boost使用类型id来确定调用哪个析构函数,或者其他类似的问题。我在一个单一开发者,单一用途的虚拟机上。
我也有同样的问题。最后,我用LLVM_ENABLE_RTTI=ON重新编译LLVM来解决这个问题。
- 使用Boost Interprocess创建托管共享内存需要很长时间
- dynamic_cast without RTTI
- 为什么 boost::interprocess::managed_shared_memory 在施工时会抛出 boost
- 使用 RTTI 克隆唯一指针的向量
- 如果使用 /MTd,则在 boost::interprocess::shared_memory_object 中崩溃
- boost::interprocess::managed_mapped_file 如何包含弹性向量?
- boost::interprocess::file_lock 与 std::ostream 一起使用时的错误行为
- std:任何没有RTTI的,它是如何工作的
- Boost.interprocess Vector 作为类成员
- 启用和禁用 RTTI 的模块之间的兼容性
- 使用 boost::interprocess 共享内存时从 std::string 转换为 "MyShmString"
- C++中的dynamic_cast在没有 RTTI 的情况下不起作用;为什么?
- Copy std::vector to boost::interprocess::vector
- 使用C RTTI(内置)通过字符串查找功能指针
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- clang, std::function and -fno-rtti
- 如何在没有RTTI的情况下设计动态类型系统
- 有没有一种方法可以使用RTTI获得基于签名的typeinfo损坏的函数名
- 使用 boost::interprocess 在共享内存中分配用户定义的结构
- 从Boost::Interprocess中移除RTTI