У меня вопрос о том, как выполнить следующее поведение, или если это возможно даже на C++. Скажем, у меня есть эта VARIADIC функцииЭлементы массива в аргументы шаблона Variadic
template<typename T, typename...Pack>
T sum(T a, Pack... pack) {
return a + sum(pack...);
}
template<typename T>
T sum(T a) {
return a;
}
, а затем у меня есть массив
double array[5];
есть способ, которым я мог бы идти о делать что-то вроде
sum(array[0], array[1], array[2], array[3], array[4]);
без жесткого кодирования в каждом элементе явно? Причина, я пытаюсь реализовать что-то такое, как,
double array[N];
sum(array[0], array[1], array[2], ..., array[N-1]);
где N установлен во время компиляции.
Я понимаю, расширение Is (например, Is ...), но не видели что-то вроде arr [Is] ... раньше. Это допустимое расширение? Кроме того, я вообще не пытаюсь суммировать вещи, суммирование было всего лишь простым примером, чтобы позволить мне продемонстрировать интерфейс, который я пытаюсь достичь. – armstrhu
@armstrhu Да, вы можете расширить произвольно сложные выражения, если они находятся в контексте, где допускается расширение. 'arr [Is] ...' расширяется до 'arr [Is # 1], arr [Is # 2], ..., arr [Is # N]'. См. Также [мой ответ здесь] (http://stackoverflow.com/a/26767333/2069064) и [Наваз здесь] (http://stackoverflow.com/a/17652683/2069064) – Barry