c++ - 模板参数 SFINAE 不使用模板参数
问题描述
为什么在 C++ 中不允许这样的构造:
#include <type_traits>
template<std::enable_if_t<true, bool> = true>
void fn() {}
template<std::enable_if_t<false, bool> = true>
void fn() {}
int main()
{
fn();
return 0;
}
似乎编译器在抱怨enable_if
我相信缺少模板参数的事实?例如,有没有办法在不引入另一个模板参数设置为某个默认值的情况下实现上述行为?
解决方案
需要有一个模板参数来替代,以便 SFINAE 发生。因此,创建一个虚拟模板参数和一个虚拟特征,它将接受它并分别返回 true 和 false。
template<class T>
constexpr bool always_true = true;
template<class T>
constexpr bool always_false = false;
template<class T=void, std::enable_if_t<always_true<T>>* = nullptr>
void fn() {}
template<class T=void, std::enable_if_t<always_false<T>>* = nullptr>
void fn() {}
推荐阅读
- python - 在 Django 中,如何保护 Graphene GraphQL 端点以供 API 使用?
- java - 如何使用 JACOB 接收字节数组?
- python - 如何找到具有给定索引的 TensorFlow 节点?
- doctrine-orm - Doctrine ORM 加入父行上的用户组
- angular - Firebase 托管未显示本地化构建
- docker - Kubernetes 服务连接被拒绝,如何访问服务?
- javascript - 在 Bootbox 弹出窗口中渲染 D3 可折叠树视图?
- javascript - React Typescript - 动态类型
- microsoft-graph-api - Microsoft Graph Intune:如何获取“注册者”用户数据
- android - 更改 APK 文件中的图像