Prüfen Sie, ob ein Typ im variadischen Vorlagenparameterpaket übergeben wird.
Ich habe irgendwo gehört, dass es mit der neuen C ++ 1z-Syntax wirklich einfach ist, zu überprüfen, ob ein Typ im variadischen Vorlagenparameterpaket übergeben wird - anscheinend können Sie dies mit Code tun, der fast eine Zeile lang ist. Ist das wahr? Was sind diese relevanten Merkmale? (Ich habe versucht, durch Fold-Ausdrücke zu blättern, kann aber nicht erkennen, wie ich sie in diesem Problem verwenden kann ...)
Hier ist, wie ich das Problem in C ++ 11 als Referenz gelöst habe:
#include <type_traits>
template<typename T, typename ...Ts>
struct contains;
template<typename T>
struct contains<T> {
static constexpr bool value = false;
};
template<typename T1, typename T2, typename ...Ts>
struct contains<T1, T2, Ts...> {
static constexpr bool value = std::is_same<T1, T2>::value ? true : contains<T1, Ts...>::value;
};