Я следующий вызов:Передача функции в качестве аргумента в C++
void Derived::GetEntry(Skill&);
InorderTraverse(GetEntry);
Который называет
void Base<ItemType>::InorderTraverse(void Visit(ItemType&)) const
Попытка собрать как написано генерирует
ошибка C3867: «Derived :: GetEntry ': список вызовов отсутствующих аргументов функции; использовать '& Производного :: GetEntry', чтобы создать указатель на член
Использование & Derived :: GetEntry генерирует
не может преобразовать параметр 1 из «недействительных (__thiscall Derived :: *) (Skill &)»в„пустоты (__cdecl *) (ItemType &)“
изменяющегося заявление в статическую ничтожную GetEntry ... устраняет эти проблемы, но и создает новый набор проблем (а именно, что я не могу переменный ток (нестатические ссылки на элементы должны относиться к определенному объекту)
У меня есть аналогичная операция обхода, которая отлично работает со статическим объявлением, поскольку вызываемая функция просто отображает информацию о каждом объекте, на который она вызывается ,
Я искал несколько дней для ответа, и мне кажется, что это что-то простое. Есть ли способ использовать нестатические функции в качестве параметра в другом вызове функции?
Полный код: https://github.com/mindaika/SkillTree
Дубликат http://stackoverflow.com/questions/400257/how-can-i-pass-a-class-member-function-as-a -callback –
Не видеть фактический код делает его несколько проблематичным в понимании этого вопроса (по крайней мере для меня). Первый фрагмент не является даже допустимым кодом C++, так как первая строка является * объявлением *, а вторая является действительным вызовом функции. Что такое * актуальная * проблема? Вы пытаетесь передать функцию «указатель-член» другой функции, которая будет использоваться для алгоритма перечисления? Связанный с Zac вопрос охватывает это красиво. – WhozCraig
, если вы точно знаете, какие функции вы передадите, и эти функции доступны из контекста, в котором вы хотите их вызвать, вы можете заменить эту функцию, проходящую перечислимым, и сделать переключатель на сайте вызова. Конечно, это не так гибко. – didierc