C++ Boost型擦除的实践与发现
我正在阅读有关C++ Boost型擦除的实践与发现,c++,boost,type-erasure,C++,Boost,Type Erasure,我正在阅读有关boost-type擦除的文章,并试图找出其潜在用途。我想在阅读大量关于这个主题的文档时练习一下(它看起来很重要)。应用程序中引用最多的领域是在客户端和服务器之间联网/交换数据。 你能推荐一些其他的例子或练习,我可以在这个库中使用I bit吗?类型擦除在非常多的情况下非常有用,以至于它实际上可能被认为是一种基本上缺失的语言功能,可以连接通用和面向对象编程风格 当我们在C++中定义一个类时,我们真正定义的是一个非常具体的类型和一个非常具体的接口,并且这两个事物不一定需要相关。类型处理
boost-type擦除的文章
,并试图找出其潜在用途。我想在阅读大量关于这个主题的文档时练习一下(它看起来很重要)。应用程序中引用最多的领域是在客户端和服务器之间联网/交换数据。
你能推荐一些其他的例子或练习,我可以在这个库中使用I bit吗?类型擦除在非常多的情况下非常有用,以至于它实际上可能被认为是一种基本上缺失的语言功能,可以连接通用和面向对象编程风格
当我们在C++中定义一个类时,我们真正定义的是一个非常具体的
处理数据,其中作为类型
处理该数据的转换。通用代码(如STL中的代码)不关心接口
,它关心类型
:您可以使用接口
对任何容器或类似容器的序列进行排序,只要它提供比较和迭代器std::sort
接口
类型
具有相同的接口
:检索。如果我们可以为检索
创建一个单独的接口,然后为每种类型专门化它,那么就好像类型
的一部分被删除了一样
any_iterator
是执行此操作的另一个非常有用的原因:如果需要使用相同的接口在多个不同的容器上进行迭代,则需要从迭代器的type
中删除容器的type
。boost::any_范围是对它的一个微妙的增强,将它从迭代器扩展到范围,但基本思想是相同的
简而言之,当您需要从具有类似
接口的多个类型
转换为具有单个接口的单个类型
时,您将需要某种形式的类型擦除。运行时技术等同于编译时模板。页16FF有一篇关于DyaMcC++的文章,它使用的是Erasuri AM。谢谢你的建议。我想说,对于网络来说,经典的运行时多态性比类型擦除更合适。不过,类型擦除对于处理std::shared_ptr
中的删除程序和分配器非常有用。同时,为了便于参考,我还阅读了Thomas Becker的以下两篇文章,这两篇文章都是优秀的参考资料,但我想您可能希望知道,除了any
或any\u迭代器
或any\u容器
之外,还需要更多的类型擦除。正如成员函数指针的存在只是为了实现委托,虚拟函数的存在可能主要是为了允许类型擦除。这是一个概念的基础。