C++ 是否有标准类型擦除容器的计划?

C++ 是否有标准类型擦除容器的计划?,c++,boost,c++14,C++,Boost,C++14,多年来,将boost功能集成到标准库中的过程变得显而易见 不过,boost的有用且实用的部分,即提供类型擦除的容器,似乎已经逃过了这个过程 是否有任何特殊原因(性能损失、缺乏稳健性)导致这种情况 在下一个标准库中是否有与合并此类功能(例如boost::any)相关的建议 shared_pointer使用类型擦除,今天的标准库中是否还有其他设施可以利用这种技术 类型擦除通常会引入额外的间接寻址,并最终引入虚拟函数调用,从而降低性能 最近有一个更新的工作草案“C++库基础扩展”,其中提出了(以及其他

多年来,将boost功能集成到标准库中的过程变得显而易见

不过,boost的有用且实用的部分,即提供类型擦除的容器,似乎已经逃过了这个过程

  • 是否有任何特殊原因(性能损失、缺乏稳健性)导致这种情况

  • 在下一个标准库中是否有与合并此类功能(例如
    boost::any
    )相关的建议

  • shared_pointer
    使用类型擦除,今天的标准库中是否还有其他设施可以利用这种技术

  • 类型擦除通常会引入额外的间接寻址,并最终引入虚拟函数调用,从而降低性能

  • 最近有一个更新的工作草案“C++库基础扩展”,其中提出了(以及其他特性)

  • std::function
    将是另一个例子


  • 任何一个都可以进入C++17,只是有一些不同。除了其他有用的类型构造器:和。

    还有一些建议,允许将
    struct
    用作类型擦除模板:但是健壮的反射可能让我们在库中实现这一点(对于类型中的每个标记方法,写类型擦除代码之类的东西)。可能不是反射1.0;)@雅克你介意把你在这里谈论的建议联系起来吗?谢谢。@GuillaumeRacicot哦,天哪,那是三年前的事了。我不知道我现在在哪里看到的。很抱歉如果我想在7-10年后做这件事,我希望反思提案会被采纳,元类提案也会被采纳;然后,可以编写名称类型为_erasure的元类来生成所需的代码mayhap<代码>类型擦除bob{int foo;void print(std::ostream&)const;}。这是一种比我在上面的评论中描述的更“干净”的方法。@Yakk没问题,我只是好奇,我不记得读过那个特别的建议:)@GuillaumeRacicot我记得看到有一个结构和一些工具在上面运行。我不知道这是一个提议还是有人在谈论提议,或者这只是一个年轻人的狂热梦想。“将boost功能集成到标准库中”——这就是boost诞生的原因