![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Здраствуйте. Вот блуждал по дебрям стандартной библиотеки GNU ISO C++, в попытке понять устройство потоков ввода-вывода. Добрался до класса ios_base. Был очень удивлен, когда наткнулся на использование обратных вызовов. Так и не смог добраться до истины, как и зачем они там используются. В файле ios_base.h есть объявление следующих функций
void _M_call_callbacks(event __ev) throw(); void _M_dispose_callbacks(void); void register_callback(event_callback __fn, int __index); Но их определения я так нигде и не нашел. Так-же загадкой для меня остается назначение многих функций из этого файла, одна из которой - locale imbue(const locale& __loc); Где можно найти сырцы с определениями этих функций? Или может они сидят в библиотеках? Для меня so, dll, lib - файлы - это что-то страшное и непонятное, а работа с динамическими библиотеками в Win и *nix-ах - это черная магия. Буду признателен, если кто-нибудь не поленится объяснить, как же все устроено под всеми этими уровнями абстракци в библиотеке ввода-вывода C++. А так же был бы не против получить ссылку на книгу или статью какую-нибудь, с помощью которой я смог бы восполнить пробел в знаниях по библиотечкам... --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Разумеется, не вся STL является статической. Некоторые куски подключаются динамически. Попробуй найти исходник printf() функции stdio.h или qsort() из stdlib.h и многих других - ты не найдешь. Потому что они подключены динамически.
В STL-е статически подключено очень многое, потому что она шаблонная. А шаблоны линкуются на стадии компиляции, следовательно все, что касается шаблонов динамическим быть не может и их исходники лежат прямо у тебя на компе. В BOOST-е вообще очень много чисто статических библиотек. Легче перечислить обратные примеры: regex, program_options (мне лень в /usr/lib лезть). Пожалуй, больше и не вспомню. Хотя юзался я очень многими. Для того чтобы найти исходники этих и многих других функций ГУГЛ в руки. Я, помню, почти сразу натыкался на ссылку к исходникам. |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Зачем же гугл? koders.com же есть. Я уж не говорю о всяких .src.rpm пакетах, которые идут вместе с линухом, и в которых следовало бы поискать в первую очередь.
Кстати, забавно, беглый grep по STL от SGI показал, что никаких callback'ов там нет. Ну на то SGI и SGI, я даже не помню когда выкачивал их реализацию
dlopen(3) Это сообщение отредактировал(а) Mayk - 14.8.2005, 16:55 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| comcon1 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Почему же, я вот тока что пробежался по stlport-у и нашел там то, о чем он писал..
А кстати, мне тоже не понятно где в этих исходниках указания на подгрузку дин-библиотек?? ----------- Все - я разобрался. Функция register_callback объявлена в классе ios_base. Вот его начало:
Дальше грепим _STLP_CLASS_DECLSPEC, получаем :
Грепим импорт, находим:
Стало немного проясняться. Появились знакомые буквы "dll". Вот дальше куды это уводит я найти не смог. Подскажите, проффи!! |
||||||
|
|||||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
Эээ,я бы попробовал "grep -R register_callback * | less" в корне исходников STLPort(ну или какую реализацию вы там препарируете) Ну если так не терпится посмотреть исходники этой ф-ции, то идём на koders.com еще раз. Вот тут register_callback() и другие вкусности лежат. Это сообщение отредактировал(а) Mayk - 14.8.2005, 17:40 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| comcon1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Дык я так и делал
Точнее так
потому что прояснение в заголовке класса, который сильно выше ;). Все результаты деланья отражены в посте. А вот макрос __declspec() найти не могу. Он, кстати не только в STL - он во всех местах. Меня интересуют не исходники, а подключение. Добавлено @ 17:47 Все я нашел: это специальные ключевые слова.
Это сообщение отредактировал(а) comcon1 - 14.8.2005, 17:45 |
||||
|
|||||
| Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Спасибо за помошь. Mayk, спасибо за хорошую ссылку.
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |