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

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

Восстановить пароль Регистрация
 
NeonLost
Пес войны
 Аватар для NeonLost
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
17.04.2013, 10:41     Вызов функции из массива, через указатель #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++ Вызов метода потомка через указатель на родителя

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

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

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