boost :: hanaで楽しくなる。私は別のタイプのタグのように機能し、特定のネストされたタイプのために確認したいので、私は花:: when_valid例から借りて、そのSFINAE対応専門と一緒にクラスis_S定義された:boost/hanaで特定のネストされた型/タグを確認する
#include <iostream>
#include <boost/hana/core/when.hpp>
namespace hana = boost::hana;
#define V(x) std::cout << x << std::endl
struct S_tag { };
struct S {
using tag = S_tag;
};
struct T {
using tag = int;
};
template< typename T, typename = hana::when<true> >
struct is_S {
static constexpr bool value = false;
};
template< typename T >
struct is_S< T, hana::when_valid< typename T::tag > > {
static constexpr bool value = std::is_same<
typename T::tag, S_tag >::value;
};
int main() {
std::cout << "is_S ( S { }) = "; V ((is_S<S>::value));
std::cout << "is_S ( T { }) = "; V ((is_S<T>::value));
std::cout << "is_S (float { }) = "; V ((is_S<float>::value));
return 0;
}
このプリントを:
$ clang++ -std=c++1z sfinae.cpp && ./a.out | c++filt
is_S ( S { }) = 1
is_S ( T { }) = 0
is_S (float { }) = 0
花哲学の値型計算に合わせて、同じ小切手を書くの単純/短い/より簡潔な方法はありますか?
私はその簡潔さを本当に愛しています。ドキュメントはよく書かれており、非常に役立ちますが、実際にはハナのイディオムの感覚を得るにはしばらく時間がかかります。 – Engineerist