Разбор элементов динамического массива в качестве аргументов? (VARIADIC)

пытаясь найти (вероятно) трюк предварительной обработки, который будет делать что-то похожее на следующий псевдо-C ++

myVariadicFun(argv[0],argv[1],argv[2],...,argv[argc] );

функция variadic готова и работает, просто нужно проанализировать аргументы массива в ней.

причина за не просто передавая массив указатель потому что я играю с constexpr / метапрограммирование на самом деле.

0

Решение

Нет, по определению вы не можете использовать динамический размер массив (т. е. размер которого определяется при выполнении) с время компиляции размер вычета.

0

Другие решения

С помощью [Boost.Preprocessor] вы можете легко добиться генерации кода, соответствующего вашим потребностям, описанным на скриншоте:

#include <boost/preprocessor/repetition/enum.hpp>

#define ARRAY_ELEMENTS(z, n, arrVar) arrVar[n]

#define EXPAND_ARRAY(N, arrVar) \
BOOST_PP_ENUM(N, ARRAY_ELEMENTS, arrVar)

#define EXPAND_CASE(N, arrVar) \
case N: cout << crawler(EXPAND_ARRAY(N, arrVar)).best_sum << endl; break

int main(int argc, char* argv[]) {
char** input = &argv[1];
--args;
switch(argc) {
EXPAND_CASE(1, input);
EXPAND_CASE(2, input);
EXPAND_CASE(3, input);
}
}

BOOST_PP_REPEAT_FROM_TO позволяет выполнить дальнейшее свертывание кода:

#include <boost/preprocessor/repetition/enum.hpp>
#include <boost/preprocessor/repetition/repeat_from_to.hpp>

#define ARRAY_ELEMENTS(z, n, arrVar) arrVar[n]

#define EXPAND_ARRAY(N, arrVar) \
BOOST_PP_ENUM(N, ARRAY_ELEMENTS, arrVar)

#define EXPAND_CASE_Z(z, N, arrVar) \
case N: cout << crawler(EXPAND_ARRAY(N, arrVar)).best_sum << endl; break;

// actually each OS has its own limitation for maximal number of arguments, see your
// OS docs for more info. Beware Boost.Preprocessor has its own limits for repeatable
// macros expansions
#define MAX_ARGS 100

int main(int argc, char* argv[]) {
char** input = &argv[1];
--args;
switch(argc) {
BOOST_PP_REPEAT_FROM_TO(1, MAX_ARGS, EXPAND_CASE_Z, input);
}
}

Но, честно говоря, я сомневаюсь, что функции шаблонных переменных предназначены для использования таким образом.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector