我在使用 enable_if
构造时遇到了问题,我已设法将其简化为一段非常简单的失败代码:
template <typename Enable, typename...Args>
struct Get;
template <typename FirstArg, typename... OtherArgs>
struct Get<typename std::enable_if<true>::type, FirstArg, OtherArgs...>
{
using type = FirstArg;
};
( Live example )
上面的代码是一些有用的代码的精简版本,但是为了这个问题,我更感兴趣的是为什么这行不通,而不是它是否有效理想或做任何有用的事情。元函数 Get
应该 接受传递给它的第一个类型,并且基于某些条件(在这种情况下总是正确的,因为我没有构造它何时是不) 返回它。
我不希望第一个参数解析为 enable_if
条件,应该完全抽象。
当我尝试运行它时(参见实际示例)它会产生
error: ‘type’ in ‘struct Get’ does not name a type using T = typename Get::type
为什么?
最佳答案
您编写的专业只有在有人通过 void
时才会生效作为 Get
的第一个参数.
在您的示例代码中,您传递了 int
.所以特化不适用。
模板定义和特化中类型的名称没有任何联系,只是它们在 Get<blah, blah, blah>
中的位置。 .它是脱离主要定义的模式匹配。
int main() {
using T = Get<void, int>::type;
}
关于c++ - 为什么这个简单的 enable_if 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26446580/