Комментарии:
Комментарии:
Не всегда корректный код
Вы приводите указатель на функцию-член класса клиента к указателю на функцию из конкрентного класса (slot::Thunk), это для некоторых классов может быть невозможно, ошибка компилятора, что-то типа "указатели имеют разную природу", наблюдатась для WTL проекта, я в свое время не стал углубляться, удалось обойтись.
Кстати эта проблема нашла отражение в FLTK (библиотека типа WTL/Qt, etc., http://www.fltk.org)/– там все события вызывают статические функции с параметром-указателем this:
static void static_cb(void* v) {
handler* h=(handler*)v;
h->member();
}
В C++ указатели на функцию-член не всегда просто адрес функции, нельзя приводить указатель на функцию одного класса к указателю на функцию другого. Однако возможно есть один способ:
template<class TyClass::*f)()>
void call(TyClass* p_this) {(
p_this->*f)();
}
т.е. сделать обычную функцию с параметром this, параметризованную функцией-членом, а на эту обычную функцию уже хранить указатель.
class foo {
public: void f() {}
};
typedef void (*call_f_type)(void*);
call_f_type call_f=(call_f_type)(call<&foo::f>);
а теперь
foo obj;
call_f(&obj);
Проблема здесь в том, что VC++ может не понять, что (call<&foo::f>) означает, что надо сгенерировать функцию и взять указатель на нее, ну и конечно как изменить Ваш пакет – как известно удобство важнее всего.
Интересно как это сделано в boost.
yaroslav_v 10.2.2003 17:11
делов-то
На самом деле ничего принципиально нового тут нет. Обычный callback. Чем это принципиально лучше чем ConnectionPoints из COM?
Евгений Коробко 10.2.2003 12:13
Хмм…
что-то не очень…
в Boost есть реализация подобного интересна тем, что:
• также является шаблонным классом
• слот может реагировать на несколько сигналов
• сигнал вызывает объект с перегруженным оператором (), т.е. не обязателен отдельный объект типа слот…
• можно передавать не только объект-слот, но и просто указатель на функцию и работать будет с тем же успехом…
так что, конечно неплохо, но та реализация, IMHO, лучше…
null 6.2.2003 13:10
Не хуже, чем в QT ихние эвенты. И не надо макросов гопницких
Huang Bai Wei 5.2.2003 13:40
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Комментарии
Комментарии Напоследок рассмотрим одну очень важную возможность HTML, которая, хоть и не касается напрямую Web-дизайна, но сильно поможет забывчивым Web- дизайнерам.Комментарий — это фрагмент HTML-кода, который не выводится на Web- страницу и вообще не обрабатывается
Комментарии CSS
Комментарии CSS В главе 2 мы узнали о комментариях — особых фрагментах HTML-кода, которые не обрабатываются Web-обозревателем и служат для того, чтобы Web-дизайнер смог оставить какие-то заметки для себя или своих коллег. Для этого язык HTML предоставляет специальный
Комментарии:
Комментарии: Как бы так это заделать??? Во первых, статья очень хорошая и полезная, спасибо. Применил в реальной программе я этот сингелтон и остался очень доволен. Но мне надо было несколько изменить поведение исходного класса. У меня ситуация такая: есть клиент, который
Комментарии:
Комментарии: template‹class TRet, class TP1› class CDelegate1 { //… }; template‹class TP1› class CDelegate1‹bool, TP1› { //… }; template‹class TRet, class TP1, class TP2› class CDelegate2 { //… }; template‹class TP1, class TP2› class CDelegate2‹bool, TP1, TP2› { //… }; и т.д… Андрей 20.3.2003 12:22 ... и статической T не надо А мне как то больше понравился такой
Комментарии
Комментарии Вплоть до этого времени я тщательно избегал темы комментариев. Вы могли бы подумать, что это будет простая тема... в конце концов компилятор совсем не должен иметь дела с комментариями; он просто должен игнорировать их. Чтож, иногда это так.Насколько простыми
21. Комментарии в СИ++
21. Комментарии в СИ++ Часто бывает необходимо вставлять в программу текст, который используется в качестве комментария только для читающего программу человека и не учитывается компилятором в программе. В C++ это возможно осуществить одним из двух способов. Символы /*
R.2.2 Комментарии
R.2.2 Комментарии Символы /* начинают комментарий, который завершается символами */. Такие комментарии не могут быть вложенными. Символы // начинают комментарий, который завершается концом этой строки. Символы //, /* и */ не имеют специального назначения в комментарии // и
Комментарии
Комментарии Комментарии помогают сделать ваш код более читабельным. Они не влияют на то, что выводит программа. Они написаны специально для того, чтобы вы их прочли. Все комментарии в Bash начинаются с хэш-символа #, за исключением первой строки (#!/bin/bash), имеющей специальное
Комментарии
Комментарии Комментарии — это фрагменты исходного текста программы, которые не компилируются и служат для пояснения кода. Для обозначения комментариев в программах на языке Object Pascal используют следующие конструкции:• // — комментарии в одной строке;• { } или (* *) —
Комментарии:
Комментарии: наследование операторов ›Дело в том, что в языке C++ операторы не наследуются. Это не верно по крайней мере для MSVC++. Более того этот метод используется при написании функтора из библиотеки Loki http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport (файл Functor.h), см. также
Комментарии
Комментарии Это правило выглядит достаточно просто:----Правило № 3. Помещайте в код комментарии. Объясняйте ваши допущения (более того, проверяйте их с помощью утверждений). Описывайте сложные блоки кода. При изменении кода изменяйте и соответствующие комментарии. Не
Комментарии
Комментарии Комментарий — это последовательность символов, которая воспринимается компилятором языка Си как отдельный пробельный символ и игнорируется. Комментарий имеет следующий вид:/* <символы> */<символы> должны принадлежать множеству представимых символов.
Комментарии:
Комментарии: Небольшое добавление Искал способ попроще включить поддержку ToolTips без явного использования класса CToolTipCtrl. И в результате сам сделал следующее: int CContentWnd::OnToolHitTest(CPoint point, TOOLINFO* pTI) const { int nHit=0; CString csText; csText="Закрыть окно"; HWND m_hWnd=this->GetSafeHwnd(); pTI->hwnd =
Комментарии:
Комментарии: Не всегда корректный код Вы приводите указатель на функцию-член класса клиента к указателю на функцию из конкрентного класса (slot::Thunk), это для некоторых классов может быть невозможно, ошибка компилятора, что-то типа "указатели имеют разную природу",
1.2 Комментарии
1.2 Комментарии Часто бывает полезно вставлять в программу текст, который предназначается в качестве комментария только для читающего программу человека и игнорируется компилятором в программе. В С++ это можно сделать одним из двух способов.Символы /* начинают
2.1 Комментарии
2.1 Комментарии Символы /* задают начало комментария, заканчивающегося символами */. Комментарии не могут быть вложенными. Символы / / начинают комментарий, который заканчивается в конце строки, на которой они