Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вызов функции в си с именем в переменной


Автор: kavkaz 26.1.2011, 08:47
Есть необходимость вызывать функцию, при условии, что ёё имя задано в переменной.
Функции также нужно передать аргументы.

В какую сторону рыть?

Автор: mes 26.1.2011, 09:14
смотря что за функция.. если экспортируемая с длл, то см. GetProcAddress
иначе самостоятельно составить карту соответствий строк функциям..

Автор: kavkaz 26.1.2011, 09:40
Всё банально
Код

#include "some_header.h"

Но с кол-вом функций больше 20-30 писать карту не хотелось бы

Автор: boostcoder 26.1.2011, 10:13
Цитата(kavkaz @ 26.1.2011,  09:40)
Всё банально
Код

#include "some_header.h"

Но с кол-вом функций больше 20-30 писать карту не хотелось бы

это вы о чем?

зы
а по поводу карты соответствия имен и функций - у mes в этом огромный опыт. вот только я не представляю как это реализовать в Си smile 

Автор: kavkaz 26.1.2011, 10:47
Позвольте ещё уточнить.
Вот пример кода
Код

#include <stdio.h>

int some_func()
{
    printf("work\n");
    return 123;
}

int main(int argc, char **argv)
{
    char *sub = "some_func";
    
    
    return 0;
}


Какие нужно здесь провести преобразования в main, чтобы вызвать функцию, название которой в переменной out ?

На какие темы гуглить для этого?

Автор: boostcoder 26.1.2011, 10:51
Цитата(kavkaz @  26.1.2011,  10:47 Найти цитируемый пост)
На какие темы гуглить для этого?

метагенераторы

Автор: mes 26.1.2011, 11:00
Цитата(boostcoder @  26.1.2011,  09:13 Найти цитируемый пост)
а по поводу карты соответствия имен и функций - у mes в этом огромный опыт.

 smile, не такой уж и большой.. 


Цитата(boostcoder @  26.1.2011,  09:13 Найти цитируемый пост)
 вот только я не представляю как это реализовать в Си 

а чего тут непонятного может быть? в простом случае составляете массив структур { имя, функция } и кол-функцию, для обертки всего этого..

Добавлено через 3 минуты и 52 секунды
Цитата(boostcoder @  26.1.2011,  09:51 Найти цитируемый пост)
метагенераторы 

kavkaz, я так понимаю задачка учебная ? тогда смысла в генераторах нет..

Автор: mes 26.1.2011, 11:19
Цитата(kavkaz @  26.1.2011,  09:47 Найти цитируемый пост)
 чтобы вызвать функцию, название которой в переменной

http://liveworkspace.org/code/cbfc0bbd740ea21569324f7b010a88d8

Автор: kavkaz 26.1.2011, 11:22
mes, Задача не то, чтобы учебная, пробую писать модуль для perl (XS). Вот думал передавать обертке имя функции, которую нужно вызвать, чтобы получить сгенерированные данные.

Добавлено через 4 минуты и 17 секунд
Цитата(mes @  26.1.2011,  11:19 Найти цитируемый пост)

http://liveworkspace.org/code/cbfc0bbd740e...9324f7b010a88d8 


Спасибо mes, вопрос исчерпан, для затравки более чем достаточно.

Автор: xvr 26.1.2011, 11:34
Цитата(kavkaz @  26.1.2011,  08:47 Найти цитируемый пост)
В какую сторону рыть? 

В сторону скриптовых языков. Ни С ни С++ напрямую это не поддерживают.

Автор: boostcoder 26.1.2011, 11:39
Цитата(mes @  26.1.2011,  11:19 Найти цитируемый пост)
http://liveworkspace.org/code/cbfc0bbd740e...9324f7b010a88d8 

неее, так не честно smile  сигнатура навязана.

Автор: mes 26.1.2011, 11:51
Цитата(boostcoder @  26.1.2011,  10:39 Найти цитируемый пост)
 сигнатура навязана. 

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)