c++ - 带 bo​​ost::hana 的 SFINAE 模板构造函数

标签 c++ boost boost-hana

给定以下代码,用 Boost hana 表达相同功能的合适方法是什么?

#include <type_traits>

#include <boost/hana/type.hpp>
#include <boost/hana/core/when.hpp>
namespace hana = boost::hana;

struct S {
    template<
        typename T,
        typename = typename std::enable_if_t< (T::value) > > // <-- equivalent?
    S (const T&) { }
};

struct X { static constexpr int value = 0; };
struct Y { static constexpr int value = 1; };

int main () {
    S a (X { }); // <-- must fail
    S b (Y { });
    return 0;
}

when 的文档提到它是 enable_if 的替代品,但我不确定如何在这种情况下应用它。那么,如何使用 Boost hana 有选择地启用模板构造函数?

最佳答案

正如@Barry 在评论中所说,hana::when 对于部分特化很有用,但不能用于您的情况。 Hana 没有提供比您已有的更简洁的咒语(这是公平的,因为它是单行的)。另请注意,您可以从 std::enable_if_t 中删除额外的 typename 关键字。

关于c++ - 带 bo​​ost::hana 的 SFINAE 模板构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751590/

相关文章:

c++ - Visual Studio 项目属性中的增量字段

c++ - 为什么强制int夸大性能问题?

c++ - 如何创建代理类?

c++ - Boost::日志和日志编号

c++ - 避免在用户定义的模板特化中重复

c++ - 如何缩小 boost::offset_ptr

c++ - 递归可变参数模板的基本案例特化

c++ - boost::hana::tuple 的元素访问时间复杂度是多少?

c++ - 在 C++14 中使用 hana::transform 转换元组内部的类型

c++ - priority_queue 声明和 bool operator < 声明