У меня есть некоторые проблемы с C++. Я создаю приложение, используя библиотеку GAlib (это C++ библиотека компонентов генетического алгоритма - http://lancet.mit.edu/ga/).Как передать аргумент функции - со ссылкой
В одном из примеров (полный код примера: http://lancet.mit.edu/galib-2.4/examples/ex6.C) автор создать функцию, которая инициализирует дерево:
void TreeInitializer(GAGenome & c)
{
GATreeGenome<int> &child=(GATreeGenome<int> &)c;
// destroy any pre-existing tree
child.root();
child.destroy();
// Create a new tree with depth of 'depth' and each eldest node containing
// 'n' children (the other siblings have none).
int depth=2, n=2, count=0;
child.insert(count++,GATreeBASE::ROOT);
for(int i=0; i<depth; i++){
child.eldest();
child.insert(count++);
for(int j=0; j<n; j++)
child.insert(count++,GATreeBASE::AFTER);
}
}
Он вызвать функцию таким образом:
genome.initializer(TreeInitializer);
и Он не проходят Аргумент. Когда я пытаюсь передать аргумент этой функции, изменяя объявление, например:
void TreeInitializer(GAGenome &, int deph);
Компилятор показывает мне ошибки. Я не знаю, как правильно вызвать эту функцию. Я знаю, что это связано с ссылкой, но передача (или не прохождение) аргумента таким образом является для меня новой.
Как передать больше аргументов этой функции?
Он передает указатель на функцию. 'genome.initializer' берет указатель и вызывает функцию столько раз, сколько нужно. Если вы хотите, чтобы функция принимала больше аргументов, вам нужно сначала изменить тип (подпись) ожидаемой функции (что-то вроде 'void (* f) (GAGenome &, int)'), а затем каждый раз, когда вызовы 'initializer' 'f', передайте дополнительный аргумент. – riv