Ich habe eine Frage, wie das folgende Verhalten zu erreichen, oder wenn es sogar in C++ möglich ist. Sagen wir, ichArray Elemente zu Variadic Template Argumente
template<typename T, typename...Pack>
T sum(T a, Pack... pack) {
return a + sum(pack...);
}
template<typename T>
T sum(T a) {
return a;
}
und dann Ich habe ein Array
double array[5];
ist es eine Möglichkeit, ich könnte gehen über das Tun etwas wie
sum(array[0], array[1], array[2], array[3], array[4]);
ohne harte Kodierung in jedem Element dieses variadische Funktion haben ausdrücklich? Der Grund, ich versuche, etwas wie zu implementieren, wie
double array[N];
sum(array[0], array[1], array[2], ..., array[N-1]);
wo N zur Kompilierzeit festgelegt ist.
Ich verstehe ist, erweitert (wie I ...), aber habe noch nie etwas wie arr [Is] ... gesehen. Das ist eine gültige Erweiterung? Außerdem versuche ich im Allgemeinen nicht, die Dinge zusammenzufassen, die Zusammenfassung war nur ein einfaches Beispiel, um mir zu zeigen, welche Schnittstelle ich erreichen möchte. – armstrhu
@armstrhu Ja, Sie können beliebig komplizierte Ausdrücke erweitern, solange sie sich in einem Kontext befinden, in dem eine Erweiterung zulässig ist. 'arr [Is] ...' expandiert zu 'arr [Ist # 1], arr [Ist # 2], ..., arr [Ist # N]'. Siehe auch [meine Antwort hier] (http://stackoverflow.com/a/26767333/2069064) und [Nawaz ist hier] (http://stackoverflow.com/a/17652683/2069064) – Barry