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

C++

Войти
Регистрация
Восстановить пароль
 
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
#1

Вектор функций? - C++

03.12.2015, 18:11. Просмотров 246. Ответов 5
Метки нет (Все метки)

Добрый вечер. На просторах интернета наткнулся на следующее:

C++
1
std::vector<std::function<...>>
(Массив функций)

а внутри лямбда-функции. Вопрос такой: можно ли подобное провернуть не с лямбда-функциями, а с:

C++
1
2
3
4
5
void a(int);
void b(int);
void c(int);
void d(int);
void e(int);
Пытаюсь найти лучший способ организации подобного "набора" функций. Про массив указателей на функции думал, но не знаю, является ли этот вариант оптимальным.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 18:11     Вектор функций?
Посмотрите здесь:

вектор функций - C++
Как правильно добавлять функции в вектор и вызывать их? Вот допустим есть вектор std::vector&lt;void (*)(int, int)&gt; vector; Он должен...

Умножение матрицы на вектор с использованием функций - C++
Помогите разобраться с функциями, что-то читая справочники не особо понятно... Собственно никакой код) Как передавать значения массивов...

можно ли в вектор добавить вектор? - C++
не сложить, а добавить? например, даны такие векторы: std::vector&lt;glm::vec2&gt; myVector; и vector&lt;вот тут какой тип делать?&gt;...

вектор - C++
Почему программа только до половины работает? #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() { ...

Вектор - C++
Как занести в вектор выражение 1+-7*10 так чтобы 1 + - 7 * 10 каждый символ на свою позицию. Хотелось бы занести число 10 как одно...

вектор - C++
Доброго всем времени суток.Помогите пожалуйста начинающему разобраться.Я самостоятельно пытаюсь освоить с++.Помощи ни откуда нет кроме...

Вектор C++ - C++
Только начал изучать вектор в C++, но возникла проблема в коде, хотя переписал прямо из учебника. Сама ошибка: &quot;vector: необъявленный...

Вектор - C++
Заполните вектор случайными числами. Напишите вывод на экран. Отсортируйте вектор. Напишите функцию, которая удалит из вектора все...

Вектор - C++
Определить значение и порядковые номера двух крупнейших элементов введенного вектора

вектор - C++
Створити вектор А. Для створення масиву викоритстати генератор випадкових чисел. Кількість елементів масиву розраховується по формулі...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.12.2015, 18:31     Вектор функций? #2
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
Вопрос такой: можно ли подобное провернуть
В последнем сообщении по упомянутой ссылке как раз есть пример с обычными функциями.
То бишь, можно.
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
03.12.2015, 18:38  [ТС]     Вектор функций? #3
Цитата Сообщение от Tulosba Посмотреть сообщение
То бишь, можно.
Лямбда-функции заметил, а это нет... Извиняюсь... Спасибо!
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
03.12.2015, 18:42  [ТС]     Вектор функций? #4
Только не выходит так провернуть, почему-то... В отдельном проекте без классов и неймспейсов все на ура проходит...

На скрине для short getErrCount();
Миниатюры
Вектор функций?  
Tulosba
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
03.12.2015, 18:57     Вектор функций? #5
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
для short getErrCount();
если это не статическая функция-член, то так не прокатит.
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
03.12.2015, 19:34  [ТС]     Вектор функций? #6
Зато вот так прокатило

Насколько верна подобная реализация? Лямбда функции и все такое, а затем в цикле вызов элементов.

Прототипы:

C++
1
2
3
4
5
void            checkFuncCalls(LA::LexAnalyzer& la);
void            checkExpressions(LA::LexAnalyzer& la);
void            checkConditions(LA::LexAnalyzer& la);
void            checkAssignments(LA::LexAnalyzer& la);
void            checkReturnValues(LA::LexAnalyzer& la);
Вектор:

C++
1
2
3
4
5
6
7
std::vector<std::function<void(LA::LexAnalyzer&)>> semantic = {
            [&](LA::LexAnalyzer& la) { checkFuncCalls(la); },
            [&](LA::LexAnalyzer& la) { checkExpressions(la); },
            [&](LA::LexAnalyzer& la) { checkConditions(la); },
            [&](LA::LexAnalyzer& la) { checkAssignments(la); },
            [&](LA::LexAnalyzer& la) { checkReturnValues(la); }
        };
Добавлено через 19 минут
А можно это как-нибудь через for_each (foreach) оформить?

C++
1
2
3
4
5
6
7
8
9
10
11
12
std::vector<std::function<void(LA::LexAnalyzer&)>> semantic = {
    [&](LA::LexAnalyzer& la) { checkFuncCalls(la); },
    [&](LA::LexAnalyzer& la) { checkExpressions(la); },
    [&](LA::LexAnalyzer& la) { checkConditions(la); },
    [&](LA::LexAnalyzer& la) { checkAssignments(la); },
    [&](LA::LexAnalyzer& la) { checkReturnValues(la); }
};
std::vector<std::function<void(LA::LexAnalyzer&)>>::iterator it = semantic.begin();
 
for (auto n : semantic){
    n(la);
};
Yandex
Объявления
03.12.2015, 19:34     Вектор функций?
Ответ Создать тему
Опции темы

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