Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск функции в памяти по ее имени 
:(
    Опции темы
null56
Дата 15.5.2008, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 2
Всего: 12



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

Например

Есть функция

Код

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);
....
}


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

Или придется это эмулировать подручными средствами?
Или это лучше сделать через указатель на функцию, что будет грамотней, запомнить адрес функции?
PM MAIL   Вверх
archimed7592
Дата 15.5.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



null56, встроенными средствами - нет, нельзя.

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


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
null56
Дата 15.5.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 2
Всего: 12



Заранее благодарен всем откликнувшимся

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

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

Сейчас просто возникла задача написать кое какой парсер, не для xml конечно, но все же... думал сделать аналогичным образом
Но ничего, через указатели на функции попробую сделать
PM MAIL   Вверх
bsa
Дата 15.5.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



null56, вообще-то для этого полиморфизм придуман (наследование и виртуальные методы). Хотя, по сути - это именно указатели на функции, но в красивой оболочке.
PM   Вверх
archimed7592
Дата 16.5.2008, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Ещё краше оболочка из boost::function smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
bsa
Дата 16.5.2008, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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

а в ней случаем этот полиморфизм не используется?  smile 
PM   Вверх
archimed7592
Дата 16.5.2008, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(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(...);



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
bsa
Дата 16.5.2008, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



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

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

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

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

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

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


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
bsa
Дата 18.5.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



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

Как создавать я понял сразу. А вот как лочить - долго не мог понять. Не знал, что это делается через отдельный объект (хотя, это и логично).
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0680 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.