Ist es möglich, eine Parameterliste zur Kompilierzeit statisch zu "entrollen", indem man in jedem "Unroll" -Schritt einen Parameter verwendet? Ich denke, variadische Vorlagen sind die Art und Weise mit partieller Vorlage Spezialisierung kombiniert zu gehen, aber ich kann dieses Beispiel nicht bekommen laufen:Zugriff auf den ersten Parameter im Parameterpaket?
#include <iostream>
char static const text1[] = "Foo";
char static const text2[] = "FooBar";
template <char const * TEXT, unsigned int N, char const *... REST, unsigned int... Ns>
void doStuff() {
std :: cout << TEXT << "-" << N << std :: endl;
doStuff<REST..., Ns...>();
}
template <char const * TEXT, unsigned int N>
void doStuff() {
std :: cout << TEXT << std :: endl;
}
void doStuff() {}
int main() {
doStuff<text1,3,text2,5>();
return 0;
}
Meine erwartete Ausgabe Foo-3\nFooBar-5
Allerdings wäre Klirren ++ 3.8 gibt mir:
error: no matching function for call to 'doStuff'
doStuff<text1,3,text2,5>();
^~~~~~~~~~~~~~~~~~~~~~~~
test.cpp:7:6: note: candidate template ignored: invalid explicitly-specified argument for template
parameter 'REST'
void doStuff() {
^
test.cpp:13:6: note: candidate template ignored: invalid explicitly-specified argument for template
parameter 'N'
void doStuff() {
^
Können Sie 'const char *' und 'N' in eine Art packen , um eine Sequenz von diesem gepackten Typ zu haben? – Jarod42
Ja kann ich, aber ich möchte einige zusätzliche Parameter an die Funktion wie z. 'template void doStuff (char test) {}' –
user1228633