Для следующего кода:Неоднозначность частичной специализации шаблона с varadic шаблоном
template <typename T>
struct IsOneOf<T,T> { const static bool True = true; };
template <typename T, typename ... Ts>
struct IsOneOf<T,any_of<T,Ts ...> > { const static bool True = true;};
template <typename T, typename T2,typename ... Ts>
struct IsOneOf<T,any_of<T2,Ts ...> > {
const static bool True = IsOneOf<T,T2>::True ||
IsOneOf<T,any_of<Ts ...> >::True;
};
template <typename T1, typename ... Ts1, typename ... Ts2>
struct IsOneOf< any_of<T1,Ts1 ...>, any_of<Ts2 ...> > {
const static bool True = IsOneOf<T1,any_of<Ts2 ...> >::True &&
IsOneOf<any_of<Ts1...>, any_of<Ts2 ...> >::True;
};
Последняя специализация предназначена для переопределения других, но я получаю неоднозначные ошибки шаблона создания экземпляра для IsOneOf<any_of<int>,any_of<int,double,float>>::True
. Может кто-нибудь предложить способ преодолеть это?
Где базовое (неспециализированное) определение шаблона? Также было бы неплохо иметь 'any_of', определенный в вопросе, даже если он является пустым или неполным, как я подозреваю. – Casey
В чем смысл этого? Почему бы не простой рекурсивный 'IsOneOf'? –
Walter
Привет, Casey, any_of - это просто пустая структура в этой точке. Цель состоит в том, чтобы определить, является ли любая группа any_of частью другого, т. Е. Any_of должно принадлежать любому из . –