Я делаю это присваивание класса, используя классический C, и застрял с этой проблемой в отношении функций обратного вызова, которые принимают переменные аргументы count и type.
По сути, я работаю над хэшированным деревом (деревом, где каждый из узлов является хеш-деревом), и у меня есть определенная стратегия обхода, которая будет использоваться несколько раз для разных целей, поэтому я реализовал ее как ht_walk(HashTree tree, (*callback)(Element e))
, так что функция, вызываемая как обратный вызов, будет обрабатывать Элемент любым необходимым способом.
Проблема в том, что в большинстве ситуаций в моей проблеме функция обратного вызова должна принимать разные аргументы. Я знаю, как спроектировать функцию со списком переменных аргументов, используя функции 'variadic' (используя stdarg, printf-way), но я не знаю, как «передать» эти аргументы в функцию обратного вызова.
Позвольте мне привести конкретный пример: предположим, у меня есть функция обратного вызова с именем addToList(Element e, List list)
, и теперь мое объявление ht_walk теперь ht_walk(HashTree tree, (*callback)(Element e), ...)
. Предположим, я хочу использовать ht_walk, как в следующем фрагменте:
HashTree my_tree = ht_create();
/* run some algorithm that populates the tree somehow */
List my_list = list_create();
ht_walk(my_tree, addToList, my_list);
Есть ли способ сделать это? Заранее спасибо!