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

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

Войти
Регистрация
Восстановить пароль
 
Ksan
27 / 27 / 0
Регистрация: 02.11.2010
Сообщений: 370
#1

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

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

Я знаю, что напрямую нельзя вызвать функцию по имени, которое хранится в char*
но, может как-то возможно сделать "финт-ушами"?
Только заранее говорю, что имя функции вообще неизвестно
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2012, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вызов функции с неизвестным именем (C++):

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

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

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

Ошибка при написании функции с неизвестным числом параметров - C++
Ругается на va_start не могу понять за что) #include<iostream> #include<cstring> using namespace std; char*foo(int n, ...); ...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке - C++
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include <iostream> using std::cout; void f(const int &ref){...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryS
Модератор
6634 / 5041 / 466
Регистрация: 14.02.2011
Сообщений: 16,851
29.07.2012, 15:26 #2
а где функция находится???
и зачем вызывать неведомую функцию???
0
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
29.07.2012, 15:39 #3
Произвольную ф-ию Вам вызвать не удастся. Не известен потому как список параметров.
Но можно сделать следующее:
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2012, 15:39
Привет! Вот еще темы с ответами:

Вызов функции в параметре другой функции - C++
программа: #include <iostream> using namespace std; struct E { E() {} }; void f(const E& e)

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

Амперсанд перед именем функции - C++
Недавно столкнулся с таким представлением функции: double &re(void) Так и не понял, зачем ставится амперсанд перед именем. Адрес...

Знак Указателя перед именем функции - C++
Не могу понять с какой целью перед именами функций стоит знак указателя в книге? Скрин: {ссылка вырезана} Pdf во вложении Да, и...


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

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

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