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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация массива функций при его создании 
V
    Опции темы
Hagrael
Дата 13.8.2011, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

Добавлено через 10 минут и 22 секунды
Даже когда я пишу так:
Код

__indPrintInt[0] = __print_1;

то компилятор выводит ошибку:
Error: '(' expected
PM MAIL   Вверх
Cheloveck
Дата 13.8.2011, 15:29 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Код

#include <iostream>

void f1(int x) { std::cout << "f1: " << x << std::endl; }
void f2(int x) { std::cout << "f2: " << x << std::endl; }
void f3(int x) { std::cout << "f3: " << x << std::endl; }
void f4(int x) { std::cout << "f4: " << x << std::endl; }

typedef void (* FUNCT)(int);

void doFunct(FUNCT * functs, size_t count, int param)
{
    for(size_t i = 0; i < count; ++i)
    {
        functs[i](param);
    }
}

int main()
{
    FUNCT functs[] = { &f1, &f2, &f3, &f4 };
    doFunct(functs, sizeof(functs) / sizeof(FUNCT), 100);
    return 0;
}

Код

$ ./test 
f1: 100
f2: 100
f3: 100
f4: 100



--------------------
user posted image
PM Jabber   Вверх
Hagrael
Дата 14.8.2011, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



А сразу же функциями заполнить нельзя?
PM MAIL   Вверх
Cheloveck
Дата 14.8.2011, 10:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1578
Регистрация: 26.7.2008
Где: Тула

Репутация: 5
Всего: 32



Hagrael, пока нет, в будущем стандарте обещают лямбды...


--------------------
user posted image
PM Jabber   Вверх
Hagrael
Дата 15.8.2011, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Понятно, спасибо.

Это сообщение отредактировал(а) Hagrael - 15.8.2011, 07:20
PM MAIL   Вверх
rodnover
Дата 15.8.2011, 07:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 10



в gcc 4.5 лямбды уже работают. smile
PM MAIL   Вверх
ller
Дата 15.8.2011, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

Репутация: 2
Всего: 4



Для неграмотных можно поподробнее, или ссылку на описание?
PM MAIL   Вверх
rodnover
Дата 15.8.2011, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: 2
Всего: 10



PM MAIL   Вверх
ller
Дата 15.8.2011, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 4.8.2008
Где: г. Таганрог

Репутация: 2
Всего: 4



rodnover, спс
PM MAIL   Вверх
Qu1nt
Дата 15.8.2011, 12:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 50



Цитата(Cheloveck @  14.8.2011,  09:21 Найти цитируемый пост)
Hagrael, пока нет, в будущем стандарте обещают лямбды... 

С++11 уже утвердили.
Код

#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
    vector<function<void()>> functions {
        [] { cout << "f1" << endl; }, 
        [] { cout << "f2" << endl; },
        [] { cout << "f3" << endl; }
    };
    for_each(functions.begin(), functions.end(), [](function<void()>& f) { f(); });
}

PM MAIL   Вверх
Hagrael
Дата 15.8.2011, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Qu1nt, спасибо за демонстрацию. Жаль, что микроконтроллеры не программируются на C++0x
PM MAIL   Вверх
xvr
Дата 16.8.2011, 10:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(Hagrael @  15.8.2011,  14:53 Найти цитируемый пост)
Жаль, что микроконтроллеры не программируются на C++0x

Почему бы нет? WinAVR например - это gcc, со всеми вытекающими последствиями  smile 

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

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

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

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

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


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

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


 




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


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

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