Форум программистов, компьютерный форум, киберфорум
Наши страницы

Использование указателя на метод вместо виртуального метода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Компилятор http://www.cyberforum.ru/cpp/thread193991.html
Здравствуйте. Пишу компилятор pas->asm на с++ Может кто-то подскажет генератор конструкцый или что-то подобное: <переменная1>+<переменная2> mov...
C++ Дан файл F, содержащий координаты множества точек на плоскости. Переписать в файл G попарно точки, через которые проходят медианы этого множества. Помогите плз. Дан файл F, содержащий координаты множества точек на плоскости. Переписать в файл G попарно точки, через которые проходят медианы этого множества. Медианой множества, состоящего... http://www.cyberforum.ru/cpp/thread193967.html
C или C++(не холивар) C++
Здравствуйте. Участвую в различных олимпиадах по программированию, пишу обычно на C++, используя все его вкусности в виде STL, ООП, темплэйтов и проч. Накануне в двух задачах не уложился в...
x86 интерпретатор исходный код C++
кто-нибудь слышал про интерпретаторы x86? в инете нарыл только что в qemu, bochs есть встроенные интерпретаторы команд x86 процессора, но пока не докопался до них. Нужно самому написать такой...
C++ Крестики Нолики http://www.cyberforum.ru/cpp/thread193237.html
учу си месяц дали задачу... хелп ми плиз! Игра крестики нолики. Игра в крестики нолики вдется на квадратном поле 3*3. Играют двое. Начинают крестики. каждый из игроков, поочередно, ставит свой...
C++ Алгоритмы и программы по использованию указателей и динамических структур данных Здравствуйте! Помогите, пожалуйста, написать задачу. Вот текст:Дан указатель P0 на один из элементов непустого двусвязного списка. Вывести число N — количество элементов в списке, а также указатели... подробнее

Показать сообщение отдельно
Evg
Эксперт CАвтор FAQ
18247 / 6372 / 438
Регистрация: 30.03.2009
Сообщений: 17,635
Записей в блоге: 28
16.04.2011, 17:14  [ТС]
Цитата Сообщение от Deviaphan Посмотреть сообщение
Просто, не совсем ясна суть манипуляций, но тебе виднее, конечно, продолжай извращаться.)
Мне кажется, что называть что-то извращением только потому, что ты чего-то не понял - это не правильно.

Общая постановка задачи. Есть чёрный ящик, в этот чёрный ящик надо отдать пару "указатель на экземпляр + указатель на метод". Вариант с классами Basi и Dervied я привёл условно, чтобы можно было описать пример того, что именно хочется сделать через указатель на метод. Для моего примера конечно же можно сделать вызов Exec, а потом вызов Tail1. Только это для упрощённой модели можно так просто сделать. Расширенный вариант выглядит так: в метод Exec тащится __closure-указатель (который есть пара "указатель на экземпляр + указатель на метод"). Внутри метода Exec создаётся поток, в потоке запускается программа, написанная на Lua, в неё передаётся моя пара, транзитно пролетает через коды на Lua и "внизу" вызывает код на Си++, который делает вызов через эту пару.

Зачем так сложно? Любую сложный интерфейс, который взаимодействует с пользователем, можно написать двумя способами. Первый способ заключается в том, чтобы реализацию интерфейса сделать простой, сам интерфейс не очень удобный для пользователя и переложить все свои проблемы на плечи пользователя. Второй способ заключается в том, что реализацию интерфейса сделать сложной, но при этом получив простой интерфейс, который будет удобным в использовании. Я всегда иду по второму пути (если это возможно)

Пример неудобного в использовании интерфейса: борландовский класс TThread. Чтобы им пользоваться. надо определить свой класс, который является производным классом от TThread, переопределить метод Execute, реализовать событие OnTerminate, в своём основном классе обеспечить возможность для доступа ко внутренним данным и методам (потому что часть, исполняемая в потоке, реализована в другом классе). Для маленькой программы конечно же это всё сойдёт, но когда пишешь что-то большое - то разводится очень много мусора вокруг создания потока. Оговорюсь сразу, что это не претензия к борланду: этот класс является лишь некоторым классом низкого уровня, над которым пользователь будет строить обёртку, удобную в конкретной программе. Просто пытался показать пример неудобного интерфейса и как его сделать удобным

Удобным в использовании была бы надстройка над таким интерфейсом. К нашему классу (с которым мы работаем и который будет рожать поток) нам нужно добавить в родители некий базовый класс, а в момент рождения потока дёрнуть метод с прототипом типа "StartThread (f1, f2)", где f1 - это указатель на метод, который будет запущен при старте потока, f2 - указатель на метод, который будет запущен в главном процессе после завершения потока. Такой интерфейс очевидным образом использовать намного удобнее
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru