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

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

Войти
Регистрация
Восстановить пароль
 
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
#1

Вызов функции из массива, через указатель - C++

17.04.2013, 10:41. Просмотров 585. Ответов 1
Метки нет (Все метки)

имею код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
void Func()
{
    cout<<"pFunc()";
}
int main()
{
    vector<void*> vec;
    vec.push_back(&Func);
    /*for(auto it=vec.begin(); it!=vec.end(); ++it)
    {
        *it();
    }*/
    for(int i=0; i!=vec.size(); ++i) vec[i]();
    getchar();
    return 0;
}
вопрос, почему не работает?..как мне вызвать эту функцию в цикле?..(
может есть извращение в бусте?..или в стд?..)

Добавлено через 14 минут
сам понял, надо было вот так...)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
void Func()
{
    cout<<"pFunc()";
}
int main()
{
    typedef void (*pFunc) ();
    vector<pFunc> vec;
    vec.push_back(&Func);
    for(auto it=vec.begin(); it!=vec.end(); ++it)
    {
        (*it)();
    }
    getchar();
    return 0;
}
Добавлено через 8 минут
но вот так поинтересней будет немного...мб кому понадобится...)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
void Func()
{
    cout<<"pFunc()";
}
int main()
{
    typedef void (*pFunc) ();
    vector<pair<bool, pFunc>> vec;
    vec.push_back(make_pair(true, &Func));
    vec.push_back(make_pair(false, &Func));
    for(auto it=vec.begin(); it!=vec.end(); ++it)
    {
        if(it->first) (it->second)();
    }
    getchar();
    return 0;
}
Добавлено через 11 часов 56 минут
но у меня есть еще один вопрос...)
можно ли добавить в массив этот указатель
C++
1
typedef void (*pFunc) ();
и указатель на функцию с аргументом например инт?
C++
1
typedef void (*pFunc) (int);
как бы разные типы получаются, но это же все таки указатели, может можно их кастануть к войд?
и использовать как-то так
C++
1
vector<pair<bool, void*>> vec;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 10:41     Вызов функции из массива, через указатель
Посмотрите здесь:

C++ Создание функции инициализации двумерного массива строк через указатель
Обращение к функции через указатель C++
Доступ к элементу массива через указатель C++
C++ Вывод массива через указатель
C++ Передать указатель функции через класс?
C++ Вызов виртуальной функции через указатель на базовый класс
C++ Передача массива через указатель
Массив в функции через указатель C++
C++ Вызов метода класса через указатель на ноль
C++ Вызов метода потомка через указатель на родителя
Передача массива другой функции через указатель C++
C++ Вызов деструктора [удаление через указатель]

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
17.04.2013, 11:21     Вызов функции из массива, через указатель #2
NeonLost, Нет, это небезопасно. Указатель на функцию к void* преобразовывать не стоит. Ну и следующий вопрос: как вы опредлите какой конкретный тип имеет функция? Можно через std::bind только если попробовать.
Yandex
Объявления
17.04.2013, 11:21     Вызов функции из массива, через указатель
Ответ Создать тему
Опции темы

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