使用C++ std :: enable_if和普通函数?

NoI*_*Guy 4 c++ templates

假设我有一个枚举:

typedef enum {
  Val1,
  Val2,
  Val3,
  Val4
} vals;
Run Code Online (Sandbox Code Playgroud)

并且函数check(vals x)返回一个布尔值,指示val是否在特定的值子集中vals.

bool check(vals x) {
  switch(x) {
  case Val1:
  case Val3:
    return true;
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

我想使用这个函数作为enable_if(函数,你可以看到,它不是一个函数,取决于运行时)的条件,让用户只使用这些值与类模板.

class MyClass<vals v> {

}
Run Code Online (Sandbox Code Playgroud)

PS:我需要模板来为类的方法进行特化,具体取决于模板值.

n. *_* m. 6

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

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

constexpr bool check(vals x) {
    return x == Val1 || x == Val3;
}
Run Code Online (Sandbox Code Playgroud)