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


Автор: null56 15.5.2008, 20:08
Возможно ли назначить обработчики события, по имени функции... 
Как обычный порядок работы программы....

Например

Есть функция

Код

void func_1(int i)
{
}


Я хочу запомнить ее по определенному имени... что - то типа

Код

void set_my_action(string function_name)
{
     string save_name = function_name;
}

set_my_action("func_1");


Чтобы можно было в дальнейшем вызвать эту функцию, где - нибудь в своей программе

Код

void my_func()
{
....
save_name(int);
....
}


ВОПРОС: возможно ли найти функцию по ее имени в памяти????

Или придется это эмулировать подручными средствами?
Или это лучше сделать через указатель на функцию, что будет грамотней, запомнить адрес функции?

Автор: archimed7592 15.5.2008, 20:16
null56, встроенными средствами - нет, нельзя.

Сразу возникает вопрос: зачем тебе это нужно?

Автор: null56 15.5.2008, 20:16
Заранее благодарен всем откликнувшимся

Добавлено через 8 минут и 44 секунды
На самом деле больше из интереса...

В php был xml парсер, который сам был написан на с++ и подключался к скриптам... 
Я прекрасно понимаю, что это интерпретатор и он ищет не по адресам в памяти.
Там была как раз эта возможность... задать нужные функции по их именам

Сейчас просто возникла задача написать кое какой парсер, не для xml конечно, но все же... думал сделать аналогичным образом
Но ничего, через указатели на функции попробую сделать

Автор: bsa 15.5.2008, 20:49
null56, вообще-то для этого полиморфизм придуман (наследование и виртуальные методы). Хотя, по сути - это именно указатели на функции, но в красивой оболочке.

Автор: archimed7592 16.5.2008, 10:41
Ещё краше оболочка из boost::function smile.

Автор: bsa 16.5.2008, 12:41
Цитата(archimed7592 @ 16.5.2008,  10:41)
Ещё краше оболочка из boost::function smile.

а в ней случаем этот полиморфизм не используется?  smile 

Автор: archimed7592 16.5.2008, 12:53
Цитата(bsa @  16.5.2008,  12:41 Найти цитируемый пост)
а в ней случаем этот полиморфизм не используется?  smile 

Он самый. Просто сравни:
Код

class SomeParser1
    : public SomeBaseParser
{
protected:
    void onLexem(...);
    void onXXX(...);
};
class SomeParser2
    : public SomeBaseParser
{
protected:
    void onLexem(...);
    void onXXX(...);
};

// сравни с этим
SomeParser parser1;
parser.onLexem = ...;
parser.onXXX = ...;
parser.parse(...);
// .......
SomeParser parser2;
parser.onLexem = ...;
parser.onXXX = ...;
parser.parse(...);

Автор: bsa 16.5.2008, 21:40
archimed7592, ты как думаешь, то что ты написал топикстартер поймет? Я, слава богу, сообразил, что ты сказать хотел. Но человек, который не знает, что такое boost::function, вряд ли догадается.  smile
Хотя, с точки зрения его требований - это то, что нужно...
С другой стороны, по моему, буст отличается тем, что у него УЖАСНЕЙШАЯ документация. Возможно, чтобы отсеить новичков пока не "дорастут". В свое время мне, например, чтобы понять, как залочить мьютекс, понадобилось смотреть исходники, так как в документации об этом как-то не очень говорилось (ну не знал я этой концепции тогда).

Автор: archimed7592 17.5.2008, 11:45
Цитата(bsa @  16.5.2008,  21:40 Найти цитируемый пост)
archimed7592, ты как думаешь, то что ты написал топикстартер поймет?

Не поймёт - спросит, а мы объясним smile.

Цитата(bsa @  16.5.2008,  21:40 Найти цитируемый пост)
С другой стороны, по моему, буст отличается тем, что у него УЖАСНЕЙШАЯ документация.

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

Цитата(bsa @  16.5.2008,  21:40 Найти цитируемый пост)
В свое время мне, например, чтобы понять, как залочить мьютекс, понадобилось смотреть исходники, так как в документации об этом как-то не очень говорилось (ну не знал я этой концепции тогда). 

Не знаю как было в твоё время smile, но в моё там всё хорошо было расписано. Я, конечно, не сразу понял как создавать, как лочить мьютекс, но, в исходники лезть не пришлось smile.

Автор: bsa 18.5.2008, 12:26
Цитата(archimed7592 @ 17.5.2008,  11:45)
Не знаю как было в твоё время smile, но в моё там всё хорошо было расписано. Я, конечно, не сразу понял как создавать, как лочить мьютекс, но, в исходники лезть не пришлось smile.

Как создавать я понял сразу. А вот как лочить - долго не мог понять. Не знал, что это делается через отдельный объект (хотя, это и логично).

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