gpt4 book ai didi

c++ - SFINAE 和标签调度之间的区别

转载 作者:行者123 更新时间:2023-12-01 23:15:06 27 4
gpt4 key购买 nike

在此视频中https://youtu.be/Vkck4EU2lOU?t=582 “标签调度”和SFINAE作为替代方案出现,允许实现所需模板功能的选择。

正确吗? “标签发送”不是使用SFINAE吗?如果正确的话,SFINAE 和标签调度到底有什么区别?

最佳答案

标签调度利用重载解析来选择正确的重载。

auto f_impl(std::true_type) { return true; }
auto f_impl(std::false_type) { return std::string("No"); }

template <class T>
auto f(const T& t) {
return f_impl(std::is_integral<T>());
}

SFINAE 会因替换失败而取消候选人资格。
替换失败正如其表面所言:尝试用具体参数替换模板参数并遇到错误,该错误在当前上下文中仅拒绝该候选者。

template <class T>
auto f(const T& t)
-> std::enable_if_t<std::is_integral_v<T>, bool> {
return true;
}
template <class T>
auto f(const T& t)
-> std::enable_if_t<!std::is_integral_v<T>, std::string> {
return std::string("No");
}

有时,其中一种技术更容易应用。当然,它们可以结合起来产生巨大的效果。

补充技术有部分特化和完全特化。另外,if constexpr 通常可以简化事情。

关于c++ - SFINAE 和标签调度之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58630192/

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