Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> С++ аналог анонимных методов. 
:(
    Опции темы
KuMa1104
Дата 27.1.2011, 02:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



Здравствуйте!

Есть задача посчитать четыре матрицы
Код

        double** D11_Calc(int iMax,int jMax);
        double** D12_Calc(int iMax,int jMax);
        double** D22_Calc(int iMax,int jMax);
        double** D21_Calc(int iMax,int jMax);


если реализовывать их алгоритм в лоб то в каждой из них нужно было бы городить конструкции типа
Код

        for(int i = 0; i <= iMax; i++)
        {
            for(int j = 0; j <= jMax; j++)
            {
                for(int q = 1; q <= 2; q++)
                {
                    returnValue[i][j] = (3-2*q) * CustomAlgoritm(i,j,q,k);
                }
    
            }
        }

Разводить такую дубликацию кода желания нет.
Где функция CustomAlgoritm специфичный для конкретной ф-уи алгоритм.

На С# при помоши анонимных методов это можно сделать довольно удобно.

Я бы вынес все эти for(..)...
В отдельный метод принимающий в качестве параметра delegate (ссылку на некоторую ф-ию) (грубо говоря)
Код

delegate void DelegateType();

double[][]  CommonCalc( DelegateType);


Теперь в каждой ф-ии я определяю её специфическое поведение.
И потом Передаю его в CommonCalc
Код

double[][] D11_Calc()
{
DelegateType delegateInstance = delegate() { System.Console.WriteLine("Hello"); };
double[][] result = CommonCalc(delegateInstance );
return result ;
}


Как подобное мне реализовать на с++.
В голову приходит только создать ещё 4-ре дополнительных ф-ий в каждой из которых реализовать поведение, а патом я знаю что в с++ тоже как то можно передать ссылку на ф-ию.

Есть какой ни будь способ по красивче?






Это сообщение отредактировал(а) KuMa1104 - 27.1.2011, 02:11


--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
mes
Дата 27.1.2011, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



для делегатов смотрите std:: (для новых компиляторов) или boost:: function и bind..
для простых случаев можно воспользоваться указателем на функцию.. 



--------------------
PM MAIL WWW   Вверх
KuMa1104
Дата 27.1.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 541
Регистрация: 16.4.2009
Где: Ростов-на-Дону

Репутация: 1
Всего: 3



Спасибо ,понятно.
Наверное для начала стоит в таком случае воспользоваться самым простым способом.
Цитата(KuMa1104 @  27.1.2011,  02:09 Найти цитируемый пост)
создать ещё 4-ре дополнительных ф-ий в каждой из которых реализовать поведение




--------------------
Галактика – суровая штука. Чтобы в ней выжить, надо знать, где твое полотенце.

Время - штука относительная... а время обеда - ещё более относительная
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0676 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.