c – 标签调度优于正常重载分辨率的优点

c – 标签调度优于正常重载分辨率的优点,第1张

概述简单明了:标签调度优于正常的重载分辨率有什么优势? 这些都是编译时进程吗?所以我认为不应该有“表现优胜者”.并且每个标签调度案例都应该能够在某种程度上被重写/重构为正常的重载(可能通过添加多种类型),对吗? 除了工作和选择候选人的不同方式之外,为什么我更喜欢标签调度而不是重载解决方案?在哪些情况下? 标签调度基本上是用于找到正确的重载函数的技术的名称.所以,从技术上讲,它只是超载而已. 从Boos 简单明了:标签调度优于正常的重载分辨率有什么优势?

这些都是编译时进程吗?所以我认为不应该有“表现优胜者”.并且每个标签调度案例都应该能够在某种程度上被重写/重构为正常的重载(可能通过添加多种类型),对吗?

除了工作和选择候选人的不同方式之外,为什么我更喜欢标签调度而不是重载解决方案?在哪些情况下?

解决方法 标签调度基本上是用于找到正确的重载函数的技术的名称.所以,从技术上讲,它只是超载而已.

从Boost站点输入:

Tag dispatching is a way of using function overloading to dispatch
based on propertIEs of a type,and is often used hand in hand with
traits classes.

您可以在标准库算法头文件中看到它全部使用.仅仅为了一个例子,考虑到一个算法AlgoX可以在提供随机访问(例如矢量)的容器上比提供双向访问(列表)的容器更有效地执行.因此,为了根据迭代器类型选择算法,可以使用iterator_traits进行标签分派

template <typename Iter>voID AlgoXImpl(Iter first,Iter last,bIDirectional_iterator_tag) {  //.....Algo specialized to bIDirectional iterators}template <typename Iter>voID AlgoXImpl(Iter first,random_access_iterator_tag) {  //.....Algo specialized to random access iterators}template <typename Iter>voID AlgoX(Iter first,Iter last) {  if (first == last) return;  AlgoXImpl(first,last,typename iterator_traits<Iter>::iterator_category());}

正如您所看到的,简单来说,这只是运算符重载的一个示例,因为类别本质上是不同的类型.

有关更真实的示例,您可以查看std :: rotate的实现方式.

总结

以上是内存溢出为你收集整理的c – 标签调度优于正常重载分辨率的优点全部内容,希望文章能够帮你解决c – 标签调度优于正常重载分辨率的优点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1242030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存