Я хотел бы вызвать функцию шаблона foo
с последовательностью различных (нетиповых) параметров, взяв последовательные целочисленные значения между нижней и верхней границей. Например:Вызов функции шаблона с несколькими значениями параметров
template <int K> void foo(){ ... }
int const UPPER = 10, LOWER = 5;
for(int i = LOWER; i <= UPPER; i++)
foo<i>();
Это, конечно, не будет работать, так как i
не известно во время компиляции. Я ищу способ достижения такого рода программы без необходимости писать что-то вроде:
foo<5>(); foo<6>(); foo<7>(); foo<8>(); foo<9>(); foo<10>();
Это, в частности, потому, что я намерен на изменение UPPER
и LOWER
от одного исполнения к другому.
Моя единственная идея состояла в том, чтобы создать постоянный массив целых чисел, которые будут отправлены в параметре шаблона:
int const arr[6] = {5, 6, 7, 8, 9, 10};
for(int i = LOWER; i <= UPPER; i++)
foo<arr[i]>();
Но, опять-таки, хотя элементы массива являются постоянными, i
не известно, в compile-time так и не arr[i]
. Какие-либо предложения?
Заранее спасибо.
Похоже, что вы можете использовать [ 'зЬй: : integer_sequence'] (http://en.cppreference.com/w/cpp/utility/integer_sequence) – NathanOliver
Вы можете поместить foo() в 'template struct foowrapper', что делает его намного проще .. Это разрешено ? –
lorro