C++ 为什么boost::ptr_list使用底层void*?

C++ 为什么boost::ptr_list使用底层void*?,c++,boost,C++,Boost,boost声明容器使用底层的std::list 为什么他们使用这种类型而不是更专门的std::list?这使得共享几乎所有的代码变得很容易,而不必考虑实例化它的类型。几乎所有代码都在单个std::list中。每个实例化只在需要的地方将代码添加到T*和void*之间的强制转换中 当然,现代编译器/链接器可以在没有此类帮助的情况下完成相当多的工作,但情况并非总是如此(有些人出于各种原因仍然使用较旧的工具链)。可能是为了减少模板实例化的数量。如果它使用std::list,那么每次使用ptr\u lis

boost声明容器使用底层的
std::list


为什么他们使用这种类型而不是更专门的
std::list

这使得共享几乎所有的代码变得很容易,而不必考虑实例化它的类型。几乎所有代码都在单个
std::list
中。每个实例化只在需要的地方将代码添加到
T*
void*
之间的强制转换中


当然,现代编译器/链接器可以在没有此类帮助的情况下完成相当多的工作,但情况并非总是如此(有些人出于各种原因仍然使用较旧的工具链)。

可能是为了减少模板实例化的数量。如果它使用
std::list
,那么每次使用
ptr\u list
都会实例化
std::list
。如果你经常使用
ptr\u列表
,那么会有很多实例。

很难说,因为我不知道boost。但是我看到的连接是void*可以被类型化为任何类型,所以它可能会像你所说的那样,使它类似于T*。我真的不明白你的意思:boost::ptr_list和std::list都是模板,所以不管底层类型是什么,它们都应该工作,不是吗?为什么需要使用void*?这是有道理的。看起来有点老套。