如何将此条件置于模板部分专业化中?

时间:2017-07-22 20:44:37

标签: c++ templates template-specialization partial-specialization

detach(package: xgboost)

错误是因为解析器在随机template<size_t bits_count, typename = void> struct best_type { }; template<size_t bits_count> struct best_type<bits_count,enable_if_t<bits_count > 8>> { // error: template argument 2 is invalid typedef byte type; }; 之后将第二个模板参数视为enable_if_t<bits_count >

显然,对此的解决方案可以将8的论点替换为enable_if_t,但是可以做些什么来保留原始表达式,以便它对未来的读者有意义吗?

2 个答案:

答案 0 :(得分:4)

您应该添加额外的括号来解释编译器的含义:

template<size_t bits_count>
struct best_type<bits_count,enable_if_t<(bits_count > 8)>> {
    typedef byte type;
};

答案 1 :(得分:1)

将条件放在括号中。

template<size_t bits_count, typename = std::enable_if_t<true>>
struct best_type {
};

template<size_t bits_count>
struct best_type<bits_count, std::enable_if_t<(bits_count > 8)>> {
    using type = byte;
};

另请注意,我已将void替换为std::enable_if_t<true>,因为它对读者更有意义。

另请注意,在C ++中使用using别名(与typedef s)相比更好