SFINAE和标签调度之间的差异
Difference between SFINAE and tag dispatch
在此视频中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++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 如何在c++中实现处理器调度模拟器
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 在 const 函数中通过引用和指针返回之间的区别
- 我想知道长双倍和双倍之间的区别
- 如何在 assert() 和 static_assert() 之间调度,如果在 constexpr 上下文中依赖?
- SFINAE和标签调度之间的差异
- 空隙和非空隙方法之间的Sfinae调度
- 如何使用boost::asio::io_service在c++ 11线程之间调度作业