为什么boost::ptr_list使用底层的void*
Why does boost::ptr_list uses underlying void *?
boost ptr_list文档声明容器使用底层std::list<void*>
。
为什么他们使用这种类型而不是更专业的std::list<T*>
?
这可能是为了减少模板实例化的数量。如果它使用std::list<T*>
,那么每次使用ptr_list<T>
也会实例化std::list<T*>
。如果你经常使用ptr_list
,那就需要大量的实例化。
这使得无论实例化它的类型如何,都可以轻松共享几乎所有代码。几乎所有代码都在单个std::list<void *>
中。每个实例化仅在需要时添加要在T *
和void *
之间强制转换的代码。
当然,如果没有这些帮助,现代编译器/链接器可以完成相当多的工作,但情况并非总是如此(由于各种原因,有些人仍然使用旧的工具链)。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- Boost buffer_cast 无法从 void* 转换为 PointerToPodType
- 使用boost void分配器是一种糟糕的做法吗
- 我如何在void*和boost共享ptr之间切换
- 获取 void* 指向 boost::any 内容的指针
- boost::function<void (int)> 类型兼容性,是怎么做到的?
- 为什么boost::ptr_list使用底层的void*
- 未解析的外部符号“;void __cdecl boost::tss_cleanup_implemented(void)&
- 为什么“boost::any”比“void*”好
- 使用mpl::if_、boost::函数和void类型定义的问题
- Boost/OpenCV 错误:与调用 '(boost::_mfi::d m<void(cv::Mat*, cv::VideoCapture*), Recorder>)
- C++,Linux:错误:请求从"boost::<void>unique_future"转换为非标量类型"boost::shared_future<void>"。 如何绕过它?
- 错误 C2182:'*':非法使用 'void' 类型 C:\boost_1_53_0\boost\smart_ptr\intrusive_ptr.hpp
- void*指针类型的Boost序列化无法编译
- 如何序列化 <boost::shared_ptr<void *>> 类型的列表变量
- boost lib中的语句,(void)p;这是什么意思?
- 如何投射到它 boost::bind(&myClass::fun, this, _1, _2, _3) 到 typedef void (*fun)(arg1, arg2, arg3)?
- 使用派生类型调用 boost::function<void(BaseType)>
- 使用派生到基类的 boost 序列化"unregistered void cast"