boost::hana::when<false>
のケースベースがない場合は、when
の特化がどのように機能するのだろうか。boost :: hana tag_of implementation
boost::hana::tag_of
実装:
template<bool condition>
struct when; // forward declaration only
template<typename T, typename = void>
struct tag_of;
template<typename T, typename>
struct tag_of : tag_of<T, when<true> >
{};
template<typename T, bool condition>
struct tag_of<T, when<condition> >
{
using type = T;
};
とテスト例:
struct my_tag {};
struct my_tag2 {};
namespace boost {
namespace hana {
template<class T>
struct tag_of<T, when<std::is_same<T, int>{}()> >
{
using type = my_tag;
};
template<class T>
struct tag_of<T, when<std::is_same<T, unsigned>{}()> >
{
using type = my_tag2;
};
}
}
int main()
{
using type = boost::hana::tag_of<int>::type;
std::cout << std::is_same<type, my_tag>{} << std::endl;
}
と私は疑問に思うなぜstd::is_same<T, int>{}()
(または同じである::value
で)、std::is_same<T, unsigned>{}()
より専門的な部分特殊であり、両方のケースで条件が偽である場合は、when<condition>
がより特化されています。
私は多くのメタ機能を実行し、特殊化とパラメータパックとソートを処理しましたが、この場合は表示されないものがあります。
事
はwhen
テンプレートの
true
または
false
値は関係ができる理由
false
場合にはデフォルトの実装がない場合、私は、表示されていないということです。
驚くほど美しいです。ありがとう。 –