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

C++

Войти
Регистрация
Восстановить пароль
 
i_s_m_mipt
0 / 0 / 0
Регистрация: 26.03.2016
Сообщений: 10
#1

Указатель на функцию - C++

29.03.2016, 13:00. Просмотров 250. Ответов 1
Метки нет (Все метки)

Доброго времени суток!
Кто может посоветовать способ присвоить указателю на функцию значение, т.е. имя функции, если мы не будем указывать его явно в коде, а задади имя функции как std::string. Можно, наверное, через ассоциативный контейнер - ключ - имя функции в формате std::string, значение указатель на функцию, вот только функции разные, и придется много map-ов организовывать. Какие есть еще варианты?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2016, 13:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатель на функцию (C++):

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

Зачем нужен указатель на указатель при работе с однонаправленным списком? - C++
День добрый. Столкнулся с непониманием этой темы. В частности, совершенно непонятен алгоритм инициализации такого вот списка. Например:...

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

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

Создать указатель на функцию - C++ Builder
Вот чтот мне приспичило создать указатель на функцию чтения строки из Ini-файла. Вроде все так как нужно сделал, но билдер кидает ошибку. ...

В функцию передать указатель на струкруру - C++ Builder
Всем привет:! Мне нужно создать собственную функцию и передать туда указатель на созданную мной структуру. Структура есть, она описана...

1
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
29.03.2016, 13:37 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
i_s_m_mipt, можно использовать платформозависимые функции GetProcAddress (для Win) и dlsym (для *nix), чтобы получить указатель на функцию из собственного процесса (или из другой dll/so).

Естественно, нужные функции должны быть помечены как экспортируемые.
Пример для *nix:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
 
#include <dlfcn.h>
 
extern "C" void test(char const * text)
{
    std::cout << "hello [" << text << "] world!\n";
}
 
int main()
{
    void * self = ::dlopen(NULL, RTLD_LAZY);
    
    if(self)
    {
        void(*p)(char const *) = (void(*)(char const *))::dlsym(self, "test");
    
        if(p)
        {
            p("check");
        }
        
        ::dlclose(self);
    }
}
Онлайн пример: http://rextester.com/ODB2007 (Clang)

Обрати внимание на ключик -Wl,--export-dynamic. Также в GCC/Clang возможно составить список конкретных функций для экспорта (-Wl,--dynamic-list).


Пример для Win:

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 <windows.h>
 
extern "C" __declspec(dllexport) void test(char const * text)
{
    std::cout << "hello [" << text << "] world!\n";
}
 
int main()
{
    HINSTANCE self = ::GetModuleHandle(NULL); 
    if(self)
    {
        void(*p)(char const *) = (void(*)(char const *))::GetProcAddress(self, "test");
        
        if(p)
        {
            p("check");
        }
    }
}
Онлайн пример: http://rextester.com/TWK98848 (VC++)

Обрати внимение на __declspec(dllexport), без этого твою функцию GetProcAddress не увидит.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.03.2016, 13:37
Привет! Вот еще темы с ответами:

как передать функции в качестве аргумента указатель на функцию описанной в другом классе? - C++ Builder
Есть два класса A и B в классе A есть две функции funcA_1 и funcA_2 в классе B - funcB в funcA_1 создается экземпляр класса B и...

Если в класс нужно передать указатель на указатель на массив строк неизвестной длинны? - C++ Builder
Как проинициализировать массив строк wchar_t * (произвольного размера) , если его нужно передать в конструктор класса ? wchar_t *A1 =...

Как сделать функцию, возвращающую указатель на функцию (которая в свою очередь возвращает указатель на массив) - C++
Изучаю c++ по одной книжке.Она говорить не умеет.. Так вот понадобилось написать функцию,которая как параметр получает указатель на...

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...


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

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

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