Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
1

Вызов функции с неизвестным именем

29.07.2012, 15:24. Просмотров 1711. Ответов 2
Метки нет (Все метки)

Я знаю, что напрямую нельзя вызвать функцию по имени, которое хранится в char*
но, может как-то возможно сделать "финт-ушами"?
Только заранее говорю, что имя функции вообще неизвестно
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.07.2012, 15:24
Ответы с готовыми решениями:

Обратиться к файлу с неизвестным именем, но известным расширением (TXT)
Ломаю голову... По заданному пути, пусть будет C:\\, есть файл *.txt Имя его неизвестно, однако...

Вызов метода с одним именем у объектов разных типов
Здравствуйте. Подскажите как решить задачу. Есть 3 класса: A, B, C которые не связаны друг с...

По неизвестным причинам пропускается выполнение одной функции
Привет всем ! У меня странная проблема, пропускается выполнение одной функции, а компилятор не...

Ошибка при написании функции с неизвестным числом параметров
Ругается на va_start не могу понять за что) #include<iostream> #include<cstring> using...

2
Модератор
Эксперт по электронике
8232 / 6099 / 814
Регистрация: 14.02.2011
Сообщений: 21,185
29.07.2012, 15:26 2
а где функция находится???
и зачем вызывать неведомую функцию???
0
59 / 59 / 8
Регистрация: 15.10.2010
Сообщений: 356
29.07.2012, 15:39 3
Лучший ответ Сообщение было отмечено Ksan как решение

Решение

Произвольную ф-ию Вам вызвать не удастся. Не известен потому как список параметров.
Но можно сделать следующее:
C++
1
typedef void (*SomeFunc)(int, float, double);
То есть определяете прототип ф-ии как тип.
Далее если у Вас есть некая ф-ия с таким же прототипом, Вы можете взять ее адрес:
C++
1
SomeFunc tmp = &myFunc;
Где
C++
1
void myFunc(int, float, double);
Таким образом переменной tmp Вы можете присвоить различные ф-ии одного прототипа.
И вызывать любую из них выражением вида
C++
1
tmp(a, b, c);
А вот из char * вытащить ф-ию Вам вряд ли удастся.
Если только она не лежит в библиотеке... Тогда эту библиотеку можно подключить динамическим образом (на этапе выполнения приложения) и импортировать ф-ию, зная ее название. Возможно, даже на уровне char *. В MSVS я не практиковал подобное. В кутах - точно можно. Если интересно - почитайте.

Но в целом суть такая же, как описано выше:
C++ (Qt)
1
2
3
4
5
 QLibrary myLib("mylib");
 typedef void (*MyPrototype)();
 MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
 if (myFunction)
     myFunction();
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.07.2012, 15:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include <iostream> using...

Вызов родовой функции (нужно передать массив в качестве аргумента функции через указатель)
#include <iostream> using namespace std; template <class T1> class mas { public: T1 n; T1...

Не работает без указателя вызов функции в функции
int AmountOfSquares(int **Array) { NumberOfSquares++; for (i = iTempTwo + 1;...

Вызов функции в возврате значения функции
Есть функция: int function1(a) { ...... return function2(function1(b),function1(c)); } Как...


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

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

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