Передать функцию в качестве аргумента другой функции по ссылке (новичок C ++) - PullRequest
0 голосов
/ 26 сентября 2011

У меня проблемы с передачей функции в качестве аргумента другой функции.Я знаю, что это уже было решено здесь, но я был бы признателен за дополнительную помощь, потому что у меня нет успеха.Я попытался адаптировать этот пример к своим потребностям:

C ++: Как передать ссылку на функцию в другую функцию?

Я пытаюсь сделать мойкод более читабелен.У меня огромное количество кода, и многие из них повторяются.Например:

CreateDatabaseEntry( A_key, name_vector, name_vector2, dimension, "_mySuffix" );
CreateDatabaseEntry( B_key, name_vector, name_vector2, dimension, "_mySuffix" ); ...

Допустим, у меня есть 26 из этих вызовов в моем текущем главном файле, по одному для B_key, C_key и т. Д. Я хотел бы переместить этот вид функций в функции в отдельности "вспомогательный файл (helper.cpp / h).Например, в CreateDatabaseEntries ().

Проблема

Вот моя проблема.Я должен был бы передать CreateDatabaseEntry в CreateDatabaseEntries.Каждый вызов CreateDatabaseEntry принимает разные аргументы (например, A_key, затем B_key и т. Д.).Я попытался использовать пример по ссылке, которую я предоставил выше.Но я получаю ошибки "нет соответствующего вызова функции".Я предполагаю, что я не получил бы ошибки, если бы я вызывал ТОЛЬКО один CreateDatabaseEntry.Потому что я мог жестко закодировать «A_key» в определении CreateDatabaseEntries.Кажется, проблема в том, что я не могу обобщить определение CreateDatabaseEntries, чтобы взять A_key, B_key, C_key или что угодно.

Кроме того, это просто простое представление.На практике я хотел бы создать несколько «зонтичных» функций, таких как CreateDatabaseEntries, которые бы принимали не только произвольные A_key, B_key, ..., но также произвольные name_vector и другие аргументы.

Я новичок, и этовозможно, что я полностью лаю не на том дереве.Если мое объяснение имеет какой-либо смысл для кого-то, может быть, есть совершенно другой способ сделать это?Если это так, было бы здорово узнать об этом.Благодаря.

1 Ответ

1 голос
/ 27 декабря 2011

Отправка функций кажется странной. Передача параметров действительно лучше, как сказал m0skit0.

Почему бы вам просто не создать массив параметров, а затем использовать цикл для прохождения каждой строки? Должно быть проще, и вам не нужно беспокоиться об указателях или распределении памяти (конечно, в зависимости от параметров и внутренней механики функции).

представьте себе:

int paramList [5] = { 0, 2, 4, 6, 8 };

for (i = 0; i < 5; ++ i)
    myFunc(paramList[i]);

Что ж, очевидно, в вашем случае вы создали бы пары, если у вас более 1 параметра ... но я думаю, вы поняли.

Если в какой-то момент вы решите изменить тип параметра, вы можете просто использовать полиморфизм для параметров (или переключиться на шаблоны), если вы не хотите сохранить все это C.

...