このようなものです。まず、小さなメタプログラミングライブラリ、それは一般的にそれを行うには2行と同じように追加されますので:次に
template<template<typename,typename>class checker, typename... Ts>
struct is_any_to_first : std::false_type {};
template<template<typename,typename>class checker, typename T0, typename T1, typename... Ts>
struct is_any_to_first<checker, T0, T1, Ts...> :
std::integral_constant< bool, checker<T0, T1>::value || is_any_to_first<checker, T0, Ts...>::value>
{};
is_any_same_to_first
の2行の実装:
template<typename... Ts>
using is_any_same_to_first = is_any_to_first< std::is_same, Ts... >;
万全を期すために、オリジナルのis_all
月また、有用であることが分かる:is_all_same
の
template<template<typename,typename>class checker, typename... Ts>
struct is_all : std::true_type {};
template<template<typename,typename>class checker, typename T0, typename T1, typename... Ts>
struct is_all<checker, T0, T1, Ts...> :
std::integral_constant< bool, checker<T0, T1>::value && is_all<checker, T0, Ts...>::value>
{};
template<typename... Ts>
using is_all_same = is_all< std::is_same, Ts... >;
Live exampleを。
is_any_same_to_first
をあまり明示しないと、問題が発生することに注意してください。私を含めてこの質問に答えようとした2/3人が、同じ3つのタイプの場合にis_same<A,B,C>
が真であると仮定しました!
を明らかに(2人の人が同じ誤った解釈をした)私は自由にあなたの質問を少し言い換えました。 – syam