Они [функции] теперь отличаются только индексом одного массива ...
Похоже на то, какие шаблоны предназначены для обработки.
template <unsigned Index>
void foo()
{
Array[Index]->whatever;
}
Ваши обратные вызовытогда будет foo<0>
, foo<1>
и т. д. (Странно, что эти обратные вызовы не принимают параметров, хотя. По моему опыту, этот вид API часто позволяет параметру void*
передавать данные в обратный вызов, так что выне нужно прибегать к глобальным переменным.)
Вот еще одна возможность, в зависимости от того, как вы планировали заполнить свой массив. Предполагается, что вы можете инициализировать Array[i]
возвращаемым значением get_data(i)
. Преимущество в том, что глобальные переменные не требуются.
template <unsigned Index>
void foo()
{
static T * data = get_data(Index);
data->whatever;
}