Ich mag eine integer_sequence verwenden, wenn eine Reihe von Zahlen zu beurteilen, alle unter einem bestimmten Wert ist: is_range() wird true zurück, sonst false zurück, wie unten:C++ 17: integer_sequence Verwendung mit Kompilierungsfehler
#include<utility>
#include<iostream>
using namespace std;
template <std::size_t N, std::size_t... Ix>
bool in_range(std::index_sequence<Ix...>) {
return ((Ix < N) && ...);
}
int main()
{
cout<<in_range<10>({1,2,30})<<endl;
cout<<in_range<10>(1,2,3)<<endl;
return 0;
}
Ich verwendete clang3.8, um es zu kompilieren, aber fehlgeschlagen.
$ clang++ m.cpp -std=c++1z
m.cpp:5:37: error: template argument for template type parameter must be a type
bool in_range(std::integer_sequence<Ix...>) {
^~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/5.3.1/../../../../include/c++/5.3.1/utility:229:21: note:
template parameter is declared here
template<typename _Tp, _Tp... _Idx>
^
m.cpp:10:11: error: no matching function for call to 'in_range'
cout<<in_range<10>({1,2,30})<<endl;
^~~~~~~~~~~~
m.cpp:11:11: error: no matching function for call to 'in_range'
cout<<in_range<10>(1,2,3)<<endl;
^~~~~~~~~~~~
3 errors generated.
Wie soll ich meinen Code korrigieren? Ich nehme an, mein Verständnis der Faltenausdruck ist falsch
Wie kann ich es korrigieren?
Die 'std :: index_sequence' erwartet einen Typ als erstes Template-Argument. Sie übergeben den 'size_t'-Wert' Ix', der eine Ganzzahl ist. –
@MarvinSielenkemper: 'std :: integer_sequence' erwartet einen Typ als erstes Template-Argument -' std :: index_sequence' ist der erste für 'std :: size_t'. – ildjarn