Форум программистов, компьютерный форум CyberForum.ru

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

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

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16949 / 5354 / 330
Регистрация: 30.03.2009
Сообщений: 14,396
Записей в блоге: 26
17.04.2011, 10:13  [ТС]     Использование указателя на метод вместо виртуального метода
Цитата Сообщение от ForEveR Посмотреть сообщение
Evg, Используя расширения языка для конкретного компилятора писать код - плохая затея
Расширение используется только на входе и выходе цепочки. Эти классы так или иначе являются компонентами VCL. А в серединке делается транзитная передача данных, которая от расширений языка не зависит (т.е. ей дали какой-то набор байтов, и этот набор просто скопировался)

Цитата Сообщение от ForEveR Посмотреть сообщение
Если тебе нужен только borland то и не парься, используй closure.
Я не парюсь. Человек не понял, а я ему объясняю. Причём объясняю не решение, а поставленный вопрос.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Класс Base является базовым не для A и B, а для функтора. Иерархия A и B и прочих не изменяется. Раз BlackBox пишешь ты, то ничто не мешает заменить void* на Base*. Плюс ты получаешь бонус в виде возможности использовать различные типы и количество параметров для вызывемой метода и вызов более одного метода класса.
Библиотека ничего о пользовательских классах знать не будет, она будет знать только об интерфейсе функтора Base и всё.
Ты напиши исходник хотя бы схематично, а не на словах объясняй. И, как я уже неоднократно объяснял, сделай это без шаблонов

Цитата Сообщение от ValeryS Посмотреть сообщение
Evg,
еще раз повтори(много написано запутался)
чем тебя не устраивает Callback?
для таких вещей по моему он и создан.
что значит неправильный this?
Не тот класс? Не тот экземпляр?

и чем не устраивают Мессаги?
Может я плохо выразился. Заставить свои коды работать я могу всегда. И всегда могу придумать с десяток решений: от идиотских до черезж...ых. В данном случае я пытаюсь найти решение, которое было бы максимально удобным для пользователя.

Давай вернёмся к примеру из последнего абзаца поста #24. Постановка задачи, например, такая. Пользователь пишет класс окна (TForm). Нужно скачать из инета картинку и отобразить её на форме. Если скачивание выполнять в главном процессе, то в момент скачивания приложение будет "висеть": т.е. оно никак не будет реагировать на нажатия кнопок, не будет перерисовываться если поверх него протащить другое окно и т.п. Чтобы этого избежать, надо процесс скачивания утащить в поток. Пока картинка скачивается в потоке, приложение живёт своей жизнью: реагирует на нажатия на кнопочки, менюшки и прочие события. Как только картинка скачалась, то главный процесс каким-то образом об этом узнает и вызовет код, который отрисует картинку на форму (потому что из потока рисовать нельзя). Как такой набор действий сделать максимально удобным для пользователя? У меня работает следующий вариант. Всё то, что начинается с User - это то, что пишет пользователь, а с Lib - это библиотека. Схематично:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class UserForm : public LibForm
{
  ...
 
  void UserGetImage (void)
  {
    LibStartThread (UserDownloadImage, UserDisplayImage);
  }
 
  void UserDownloadImage (void)
  {
    // Скачивание картинки (в потоке)
  }
 
  void UserDisplayImage (void)
  {
    // Отрисовка картинки (в главном процессе)
  }
}
Т.е. для того, чтобы работать с потоками, пользователю необходимо всего два дополнительных действия, которые являются максимально примитивными: добавить в родителя класс LibForm и поставить вызов библиотечного метода LibStartThread, подав параметрами указатели на собственные методы UserDownloadImage и UserDisplayImage. Эти два собственных метода так или иначе пришлось бы реализовывать, а потому они практически не являются дополнительными действиями. Каким образом библиотечный метод LibStartThread обеспечит вызов UserDownloadImage в потоке, дальнейший выход из себя (т.е. после запуска потока работа UserGetImage завершится и приложение начнёт обрабатывать сообщения) и вызов UserDisplayImage в главном процессе после завершения работы потока - это исключительно проблема библиотеки и пользователя она никоим боком не колышет. И речь об этом сейчас не идёт. Речь идёт только о том, каким образом организовать максимально удобный для пользователя интерфейс (разумеется, в пределах того, что позволяет язык)

Если ты можешь предложить что-то более удобное для пользователя (а не для того, кто будет библиотеку поддержки реализовывать) - предложи

Добавлено через 44 секунды
И заодно объясни, что такое Callback

Добавлено через 10 минут
Да, вот ещё. Библиотека поддерживает возможность работы без потока. Т.е. LibStartThread может запустить UserDownloadImage и UserDisplayImage последовательно в главном процессе - сие удобно для процесса отладки, если возникает подозрение, что проблема обусловлена работой с потоком. Переключение между двумя режимами опять-таки делается одним лёгким движением руки
 
Текущее время: 04:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru