gpt4 book ai didi

c++ - 标签调度相对于正常重载解析的优势

转载 作者:可可西里 更新时间:2023-11-01 18:26:14 25 4
gpt4 key购买 nike

简单明了:标签分派(dispatch)相对于正常的重载解析有何优势?

这些都是编译时进程,对吧?所以我想不应该有一个“性能赢家”。在某种程度上,每个标签调度案例都应该能够被重写/重构为正常的重载(可能通过添加多种类型),对吧?

除了工作和选择候选人的不同方式外,为什么我更喜欢标签分派(dispatch)而不是重载解析?在哪些情况下?

最佳答案

Tag dispatching 基本上是一种用于查找正确重载函数的技术的名称。因此,从技术上讲,它只不过是重载而已。

把它从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.

您可以在标准库 algorithm 头文件中看到它的全部使用。仅作为示例,考虑有一种算法 AlgoX,它可以在提供随机访问的容器(例如 vector)上比在容器上更有效地执行提供双向访问(list)。因此,要根据 iterator type 选择算法,可以使用 iterator_traits

标签分派(dispatch)
template <typename Iter>
void AlgoXImpl(Iter first, Iter last, bidirectional_iterator_tag) {
//.....Algo specialized to bidirectional iterators
}

template <typename Iter>
void AlgoXImpl(Iter first, Iter last, 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++ - 标签调度相对于正常重载解析的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com