![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ну да, незаметил, кстати а ты this какой передаешь? конструктор TMyLibInterface явно не в курсе о this экземпляра TAnyClass... Добавлено через 2 минуты и 13 секунд собрал под vs2005, пришлось заменить lpCallMethod lpfun = ClassName::CallMethod; на lpCallMethod lpfun = &ClassName::CallMethod; запускаю, валится на асм вставке, и debug и release... |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Lazin, ) не обижайся, но ты жгешь.
У меня в VS - шестерка работает, а вобщем-то забей. Продолжать в этом направлении что-то делать нет смысла, по тому, как я уже упоминал, стандартом является язык а не то как его конкретный компилятор представляет в машинном коде. Еще стандарт, конвенции вызовов функций, но здесь этого не достаточно. |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
ты когда это писал, задумывался о том, что станет с твоим кодом, если пользователь, к примеру объявит хоть одну виртуальную функцию? зы раздел называется "С++ общие вопросы", для асма есть свой раздел |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Без обид, но жжёшь по-моему тут один ты. Ради экономии нескольких строк придумывать такой неповоротливый костыль... Лучше снабди библиотеку хорошей документацией и примерами, и сделай всё в рамках стандарта. -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| vaddsm |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Если клас будет унаследован от абстрактного или сам станет таковым после объявления виртуальных методов. То в самом начале, экземпляра подобного класса будет описываться VMT. А как это повлияет на алгоритм извлечения this? Конструктор то виртуалить нельзя. Поясни конкретсно, что ты имел ввиду задав этот вопрос, может я действительно не знаю чего-то в этом вопросе. Добавлено через 6 минут и 42 секунды
Темка, то как называлась... "Возможно ли ?". В целях самообразования между прочем. А то, что я предложил -- первый пришедший в голову, вариант. Верняк есть и другие, предложите свои. Добавлено через 12 минут и 56 секунд
Серьезно?? и куда меня послали бы в этом разделе, с вопросом о выполнении кода при инициализации экземпляра объекта c++ класса. В лучшем случае в этот раздел. |
||||||
|
|||||||
| Lazin |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
я подумал что ты пытаешься определять адрес по другому... если его искать в стеке, до должно работать (для одного компилятора), но все равно это костыли...
дело в том, что многие (я например) не знают асм, а то, что ты пишешь не соответствует стандарту С++ и вообще не обязано(мягко говоря) работать |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
В любом случае такое решение получится одноразовым (непереносимым). Я все таки считаю , что лучше смотреть в сторону стандартных языковых возможностей. Вы можете привести пример желаемого взаимодействия клиентского кода с библиотекой без учета реализации? Это сообщение отредактировал(а) mes - 8.9.2008, 13:22 |
|||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Ладно, давайте забудем на время о методе, в адрес которого прозвучала критика. И так, как единогласно было решено – нормального, соответствующего стандартам, способа реализации того, что я хотел видеть – нет.
Предложите свои: Некоторая библиотека предоставляет свой функционал через методы класса TMyLib. Самым простым способом применения, является вызов ее функций в конструкторе, класса для которого она применяется:
Но, так, как библиотека задает поведение методов класса, устанавливает правила. Как если написать virtual или DYNAMIC перед методом, то было бы весьма логично эти правила описывать в том месте, где декларируются эти самые функции. То как я видел это, вы уже видели. |
|||
|
||||
| W4FhLF |
|
||||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Что здесь происходит? Вызов _ИМЯ_МЕТОДА1_, а потом _ИМЯ_МЕТОДА2? Или просто сохранение их адресов? Как тогда потом это применяется?
Что значит задаёт поведение методов класса? Какие правила? Код метода статичен. Следовательно, на его поведение могут влиять только переменные-члены класса или аргументы при вызове. Или в библиотеке существует некоторый унифицированный интерфейс и TMyLib задаёт методы вызова, которые потом где-то кем-то вызываются? Если так, то где и кем? Я пытаюсь въехать в задачу -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это опять реализация... Пострайтесь именно о интерфейсе/функционале библиотеки рассказать. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Жуть конечно, но гораздо более переносимо, чем asm вставки Это сообщение отредактировал(а) xvr - 8.9.2008, 18:31 |
|||
|
||||
| vaddsm |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
ОГО!
Надо успокоится. Теперь посути, какие недостатки видят участники форума в данном методе?, я лично считаю что код 100% рабочий и переносимый.
Если, честно я немного растерен, а зачем это собственно расказывать здесь, ведь это уже оффтопик.
Статичен, до поры до времени.
Следовательно не так.
Как я вижу, основная задача решена xvr.
Нет, библиотека, патчит методы в рантайме, для решения некоторой удивительной задачи. Но знание об этом вам помогут, дать подсказку мне? Добавлено через 7 минут и 50 секунд xvr, Умница! |
||||||||||
|
|||||||||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Причем, благодаря именно такой реализации мой код будет вызываться значительно раньше всего, что будет описано в конструкторе класса. И это мне тоже, очень надо!
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| vaddsm |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 128 Регистрация: 30.6.2007 Репутация: нет Всего: нет |
Ага, поставьте +, будет 100 постов присоеденюсь!
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |