2016-09-28 3 views
0

다음 코드가 주어지면 Boost hana와 동일한 기능을 표현하는 적절한 방법은 무엇입니까?boost :: hana를 사용하는 SFINAE 템플릿 생성자

#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 기능을 사용하여 템플릿 생성자를 선택적으로 활성화하려면 어떻게해야합니까?

+0

'hana :: when'은 부분 특수화를 활성화하는 것에 관한 것입니다. – Barry

+0

@Barry : 맞습니다. 내가 찾고있는 것은 일반 enable_if를 간결한 하나의 주문으로 대체하는 영리한 방법입니다. – Engineerist

답변

1

@ Barry가 의견에서 언급했듯이 hana::when은 부분 전문화에 유용하며 귀하의 경우에는 사용할 수 없습니다. 하나 (Hana)는 당신이 이미 가지고있는 것보다 더 간결한 주문을 제공하지 않습니다. 또한 typename 키워드를 std::enable_if_t에서 삭제할 수 있습니다.