Я не знаю ExtArrayExporter
, EXT_TYPES
и т. Д. c., Поэтому я предлагаю общий код c, который вы можете адаптировать под свои нужды.
Он основан на рекурсивном variadi c template foo()
функционирует следующим образом
// ground case
template <typename ... Ts>
void foo ()
{ /* do something with Ts... */ }
// recursive case
template <typename ... Ts, typename ... Cs>
auto foo (char c0, Cs ... cs)
{
switch ( c0 )
{
case 'I':
return foo<Ts..., int>(cs...);
break;
case 'F':
return foo<Ts..., float>(cs...);
break;
case 'B':
return foo<Ts..., bool>(cs...);
break;
// ...
}
}
, и вы можете использовать его следующим образом
foo<>('I', 'B', 'F', 'B', 'B', 'I');
или просто
foo('I', 'B', 'F', 'B', 'B', 'I');
Идея заключается в том, что каждый вызов foo()
использует аргумент char
, преобразуя его в аргумент шаблона и добавляя его в список Ts...
variadi c; когда аргумент char завершен (основной случай), вы можете использовать разрешенный параметр шаблона Ts...
.
Обратите внимание, что это решение является обобщенным c и работает не только для 2, но для неопределенного числа аргументов.