Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.84
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
#1

Массив функций - C++

11.08.2011, 23:33. Просмотров 6633. Ответов 8
Метки нет (Все метки)

Есть функция:
C++
1
bool sota(a& d1, a& d2) {return 1;}
Я вызываю её вот так:
C++
1
sort(mas->begin(), mas->end(), sota);
Мне нужно сделать массив из 10 функций sota, с разными значениями return. К примеру:

C++
1
2
3
4
5
6
sota[0](a& d1, a& d2) {return 7;}
sota[1](a& d1, a& d2) {return 4;}
sota[2](a& d1, a& d2) {return 20;}
sota[3](a& d1, a& d2) {return 1;}
sota[4](a& d1, a& d2) {return 3;}
sota[5](a& d1, a& d2) {return 9;}
И далее вызывать их вот так:
C++
1
2
3
for (int i = 0; i<10;i++) {
     sort(mas->begin(), mas->end(), sota[i]);
}
Подскажите как сделать?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.08.2011, 23:33     Массив функций
Посмотрите здесь:

C++ Одномерные массив (Шаблоны функций)
Двумерный массив(в виде функций) C++
Оформить одномерный массив в виде функций C++
C++ Дан массив из прототипов функций или указателей на функцию, сделать функцию, возвращающую этот массив
C++ Массив функций
C++ Шаблоны функций и двумерный массив
C++ Возожно ли создать массив указателей на шаблоны функций?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:01     Массив функций #2
Ну можно ещё использовать массив указателей на функцию.
Что-то на подобие такова:
C++
1
2
3
4
5
6
7
8
9
bool sota_0(a& d1, a& d2) {return 7;};
bool sota_1(a& d1, a& d2) {return 4;};
bool sota_2(a& d1, a& d2) {return 20;};
bool sota_3(a& d1, a& d2) {return 1;};
bool sota_4(a& d1, a& d2) {return 3;};
bool sota_5(a& d1, a& d2) {return 9;};
// ...
bool (*pSota_X[10])(a& d1, a& d2)=
{sota_0,sota_1, sota_2, sota_3, sota_4, sota_5 /*  ...  */};
Сыроежка
Заблокирован
12.08.2011, 00:05     Массив функций #3
Цитата Сообщение от Union Посмотреть сообщение
Есть функция:
C++
1
bool sota(a& d1, a& d2) {return 1;}
Я вызываю её вот так:
C++
1
sort(mas->begin(), mas->end(), sota);
Мне нужно сделать массив из 10 функций sota, с разными значениями return. К примеру:

C++
1
2
3
4
5
6
sota[0](a& d1, a& d2) {return 7;}
sota[1](a& d1, a& d2) {return 4;}
sota[2](a& d1, a& d2) {return 20;}
sota[3](a& d1, a& d2) {return 1;}
sota[4](a& d1, a& d2) {return 3;}
sota[5](a& d1, a& d2) {return 9;}
И далее вызывать их вот так:
C++
1
2
3
for (int i = 0; i<10;i++) {
     sort(mas->begin(), mas->end(), sota[i]);
}
Подскажите как сделать?
Объявляете массив функций. Например,

bool ( *f )( a &, a & )[5] = { sota0, sota1, sota2, sota3, sota4 };
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:11     Массив функций #4
Цитата Сообщение от Union Посмотреть сообщение
Код C++
sota[0](a& d1, a& d2) {return 7;}
sota[1](a& d1, a& d2) {return 4;}
sota[2](a& d1, a& d2) {return 20;}
sota[3](a& d1, a& d2) {return 1;}
sota[4](a& d1, a& d2) {return 3;}
sota[5](a& d1, a& d2) {return 9;}
А зачем эти все функции? Они ведь всёравно вернут или 0(false) или 1(true)?(То что у тебя есть вернёт 1)
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
12.08.2011, 00:20  [ТС]     Массив функций #5
Это для примера, там будет разный большой код.... но да, в конечном итоге всеравно 0 или 1

Добавлено через 2 минуты
Сыроежка, а можно подробнее, как обращаться к такому массиву в итоге, и как его правильно объявить?

Добавлено через 4 минуты
ошибка: ‘f’ declared as function returning an array
Ree.exe
56 / 56 / 4
Регистрация: 01.08.2011
Сообщений: 141
12.08.2011, 00:21     Массив функций #6
Для моего примера вот так
pSota_X[i](d1, d2);
Union
17 / 17 / 2
Регистрация: 16.08.2010
Сообщений: 252
12.08.2011, 00:22  [ТС]     Массив функций #7
Ага, спасибо, разобрался
Сыроежка
Заблокирован
12.08.2011, 00:43     Массив функций #8
Цитата Сообщение от Union Посмотреть сообщение
Это для примера, там будет разный большой код.... но да, в конечном итоге всеравно 0 или 1

Добавлено через 2 минуты
Сыроежка, а можно подробнее, как обращаться к такому массиву в итоге, и как его правильно объявить?

Добавлено через 4 минуты
ошибка: ‘f’ declared as function returning an array
Я допустил ошибку. Правильно будет

C++
1
bool ( *f[5] )( a &, a & ) = { sota0, sota1, sota2, sota3, sota4 };
Но чтобы таких ошибок не допускать, проще работать с typedef

Например,

typedef bool fn( a &, a& );

C++
1
fn *af[] = { sota0, sota1, sota2, sota3, sota4 };
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.08.2011, 01:03     Массив функций
Еще ссылки по теме:

Шаблоны функций и массив указателей C++
Массив функций класса C++
Создать массив адресов функций C++
Динамически выделить память под массив функций C++
Создать динамический массив вне функций C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
alex_x_x
бжни
2445 / 1650 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
12.08.2011, 01:03     Массив функций #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
в c++0x

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <functional>
#include <vector>
#include <iostream>
 
int f0( int a, int b ) { return a*b; }
int f1( int a, int b ) { return a+b; }
int f2( int a, int b ) { return a-b; }
int f3( int a, int b ) { return a/b; }
 
int main()
{
  std::vector<std::function<int (int,int)> > v = {f0, f1, f2, f3};
  std::cout << v[2]( 10, 15 ) << std::endl;
  return 0; 
}
Добавлено через 6 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <functional>
#include <vector>
#include <iostream>
 
int main()
{
  std::vector<std::function<int (int,int)> > v = {
      [](int x, int y) { return x * y; },
      [](int x, int y) { return x + y; },
      [](int x, int y) { return x - y; },
      [](int x, int y) { return x / y; }     
  };
  std::cout << v[2]( 10, 15 ) << std::endl;  
  return 0; 
}
Yandex
Объявления
12.08.2011, 01:03     Массив функций
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru