c++ - 将 C++ std::enable_if 与普通函数一起使用?

标签 c++ templates

假设我有一个枚举:

typedef enum {
  Val1,
  Val2,
  Val3,
  Val4
} vals;

还有一个函数 check(vals x),它返回一个 bool 值,指示 val 是否在 vals 中的特定值子集中。

bool check(vals x) {
  switch(x) {
  case Val1:
  case Val3:
    return true;
  }
  return false;
}

我想将此函数用作 enable_if 的条件(如您所见,该函数不是取决于运行时的函数),让用户仅使用那些值类模板。

class MyClass<vals v> {

}

PS:我需要模板根据模板值对类的方法进行特化。

最佳答案

在 C++14 中,只需声明函数 constexpr 并保持实现不变。

在 C+11 中,您需要将其更改为单个 return 语句:

constexpr bool check(vals x) {
    return x == Val1 || x == Val3;
}

关于c++ - 将 C++ std::enable_if 与普通函数一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686133/

相关文章:

c++ - VS2012 上的 decltype 内没有 ADL

c++ - 具有隐藏可见性的 C++ 模板参数问题

c++ - 如何使用可变参数使模板推断函数的返回类型

c++ - 错误 : expected primary-expression before 'template'

c++ - OpenCV CUDA C++ C 图像灰色

c++ - 如何在 visual studio 2010 中使用 boost::multiprecision::float128

c++ - GDI+ 在为 vista 重绘时没有清除我的窗口

c++ - 我可以将具有依赖项的 C++ 库作为 Docker 镜像分发吗?

c++ - C++模板参数有什么要求?

C++11 性能 : Lambda inlining vs Function template specialization