Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

17.04.2013, 10:41. Просмотров 607. Ответов 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;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 10:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов функции из массива, через указатель (C++):

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель) - C++
#include &lt;iostream&gt; using namespace std; template &lt;class T1&gt; class mas { public: T1 n; T1 a; void input() ...

Вызов виртуальной функции через указатель на базовый класс - C++
Всем привет! Помогите пожалуйста разобраться с вызовом виртуальной функции в программе. В моей программе требуется организовать класс...

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

Создание функции инициализации двумерного массива строк через указатель - C++
Здравствуйте,имеется двумерный массив: in_data_up=_T(&quot;00&quot;); in_data_up=_T(&quot;01&quot;); ...

Вызов деструктора [удаление через указатель] - C++
class A: public B { public: A() {} ~A() {std::cout &lt;&lt; &quot;del&quot;;} void someFn(A*); void someFn2(); }; void someFn(A*...

Вызов метода потомка через указатель на родителя - C++
Всем доброго времени суток, никак не придумаю, как провернуть такое: Пишу простенькую игру на cocos2dx. Есть первый класс, CNode - он...

1
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
17.04.2013, 11:21 #2
NeonLost, Нет, это небезопасно. Указатель на функцию к void* преобразовывать не стоит. Ну и следующий вопрос: как вы опредлите какой конкретный тип имеет функция? Можно через std::bind только если попробовать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 11:21
Привет! Вот еще темы с ответами:

Универсальный вызов метода через указатель на объект - C++
Никак не могу найти универсальную конструкцию, которая позволяла бы вызывать любой метод класс, с любыми параметрами через указатель на...

Вызов метода класса через указатель на ноль - C++
Почему в таком коде не происходит ошибка при вызове метода класса, а уже только в самом методе: struct A { int a; void...

Вызов метода производного класса через указатель на базовый класс - C++
Всем привет ! Подскажите почему , при выполнении строки 45 я получаю ошибку ? А именно при выполнении выражения c-&gt;fnz() ...

Вызов через указатель на функцию-член - C++
Всем экспертам привет :) Разбавим раздел, так сказать. Задался тут таким вопросом: Есть класс, в котором объявлено поле типа...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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