2016-04-07 4 views
1

Ich bin auf der Suche nach einer weniger klunker Antwort auf this question, nämlich zur Kompilierzeit prüfen, ob ein Template-Parameter in einer Liste von Zahlen ist. Ich möchte nicht nur den Bereich einer Funktion überprüfen, sondern prüfen, ob sich die ganze Zahl zur Kompilierzeit in einer beliebigen Liste von ganzen Zahlen befindet. Der Autor dieser Antwort schrieb, dass "Dinge viel einfacher sein werden, wenn C++ 0x mit conexpr, static_assert und benutzerdefinierten Literalen aus ist", aber ich sehe nicht exakt wie.Ist es möglich boost :: mpl :: contains auf einem statischen Vektor_c zu verwenden?

Ich dachte, this boost::mpl::contains Funktion (oder was auch immer es heißt) zu verwenden, aber es dauert nur ein Typ als zweiter Parameter.

+0

'vector_c' werden Arten als auch halten. Unklar was du fragst. – SergeyA

+0

Was hat diese Frage mit der Frage zu tun, ob man auf einem 'vector_c'' enthalten 'kann oder nicht? Ist die Frage nur: Wie benutzt du 'contains' in einer solchen Sequenz? – Barry

+0

Sorry für die schlechte Wortwahl. Ich möchte zur Kompilierzeit prüfen, ob ein Template-Parameter in einer Zahlenliste enthalten ist. –

Antwort

2

Gerade für den Spaß von ihm:

template <int first, int... last> 
struct int_list { 
    static bool constexpr check(int c) { 
     return first == c ? true : int_list<last...>::check(c); 
    } 
}; 

template <int first> 
struct int_list<first> { 
    static bool constexpr check(int c) { return c == first; } 
}; 

using my_sequence = int_list<1, 5, 12, 45, 76, 60>; 

static_assert(my_sequence::check(10), "No tenner"); 
+0

[Und hier sind drei tenners] (https://www.youtube.com/watch?v=ERD4CbBDNI0) – user4581301

+0

@ user4581301, wenn auch andere :) – SergeyA

Verwandte Themen