У меня есть функция следующей подписи:
void foo(int argc, char const * const argv[]);
Я хотел бы назвать ее кратко, аналогично, но не обязательно, идентично, как показано ниже:
foo(3, {"one", "two", "three"});
Я знаю, что C поддерживает составные литералы только для этой цели ( ссылка ).
Я также знаю, как решить проблему с помощью шаблонов ( ссылка ).
Однако моя проблема немного другая. Сигнатура функции фиксирована - обычно она принимает аргументы, переданные в main
, а размер массива не предопределен. Я пишу тесты для этой функции, и в моем случае переданные массивы известны во время компиляции.
Есть ли способ вызвать foo
без использования временных переменных или функций-оболочек, как показано ниже?
char const * array[3] = {"one", "two", "three"};
foo(3, array);
template<int N>
void wrapper(char const * const (&array)[N])
{
foo(N, array);
}