Signals/Slots концепция
От: maks1180  
Дата: 17.09.21 14:34
Оценка:
Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу.
Желательно, что-бы работала на старых компиляторах.

Не могу понять как написать на с++ (без ассемблера) код, который вызовет метод объекта, если нам известно только адрес объекта и адрес метода.
На ассемблере то легко это сделать, а как на с++ ?
===============================================
(реклама, удалена модератором)
Отредактировано 17.09.2021 14:35 maks1180 . Предыдущая версия .
Re: Signals/Slots концепция
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 17.09.21 14:55
Оценка: +1
Здравствуйте, maks1180, Вы писали:

M>Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу.

M>Желательно, что-бы работала на старых компиляторах.

Сигналы и слоты — подход, используемый в некоторых языках программирования и библиотеках (например, Boost, gtkmm и Qt) который позволяет реализовать шаблон «наблюдатель», минимизируя написание повторяющегося кода.

Посмотри boost (первое попавшееся Boost Signals — сигналы и слоты для C++).
Re: Signals/Slots концепция
От: Homunculus Россия  
Дата: 17.09.21 14:58
Оценка:
Здравствуйте, maks1180, Вы писали:

Если делать совсем чисто как в Qt, то без тулзы типа moc не обойтись. Пост-процессинг кода
Re: Signals/Slots концепция
От: Videoman Россия https://hts.tv/
Дата: 17.09.21 15:22
Оценка:
Здравствуйте, maks1180, Вы писали:

M>Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу.

M>Желательно, что-бы работала на старых компиляторах.

У меня есть своя маленькая легкая библиотечка, которая делает всё что мне нужно как в QT, но там шаблонная магия, С++17 и небольшая завязка на потоки с синхронизацией, т.к. слоты без возможности вызовов из других потов не так полезны на практике.

M>Не могу понять как написать на с++ (без ассемблера) код, который вызовет метод объекта, если нам известно только адрес объекта и адрес метода.

M>На ассемблере то легко это сделать, а как на с++ ?

Проще всего использовать готовыe примитивы: начать можно с std::invoke, std::apply и std::function. C помощью них сможешь организовать любые нужные тебе вызовы.
Отредактировано 17.09.2021 15:51 Videoman . Предыдущая версия .
Re[2]: Signals/Slots концепция
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 17.09.21 15:58
Оценка:
Здравствуйте, Homunculus, Вы писали:

H>Если делать совсем чисто как в Qt, то без тулзы типа moc не обойтись. Пост-процессинг кода


Только пре
Маньяк Робокряк колесит по городу
Re[3]: Signals/Slots концепция
От: Homunculus Россия  
Дата: 17.09.21 15:59
Оценка:
Здравствуйте, Marty, Вы писали:

M>Здравствуйте, Homunculus, Вы писали:


H>>Если делать совсем чисто как в Qt, то без тулзы типа moc не обойтись. Пост-процессинг кода


M>Только пре


Ну да, конечно.
Re[2]: Signals/Slots концепция
От: Videoman Россия https://hts.tv/
Дата: 17.09.21 16:08
Оценка: +2
Здравствуйте, Homunculus, Вы писали:

H>Если делать совсем чисто как в Qt, то без тулзы типа moc не обойтись. Пост-процессинг кода


Если не нужен real-time reflection, когда ты при компиляции вообще непонятно что вызываешь, то препроцессор не нужен. Всё остальное спокойно реализуется на шаблонах, почти с таким же синтаксисом как и Qt-шные сигнал-слоты.
Отредактировано 17.09.2021 16:08 Videoman . Предыдущая версия .
Re: Signals/Slots концепция
От: _NN_ www.nemerleweb.com
Дата: 17.09.21 16:21
Оценка: 1 (1)
Здравствуйте, maks1180, Вы писали:

M>Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу.

M>Желательно, что-бы работала на старых компиляторах.

Boost.Signal2 ?
Тут есть список разных библиотек: https://julienjorge.medium.com/testing-c-signal-slot-libraries-1994eb120826
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Signals/Slots концепция
От: Sm0ke Россия ksi
Дата: 17.09.21 16:57
Оценка: +1
Здравствуйте, maks1180, Вы писали:

M>Не могу понять как написать на с++ (без ассемблера) код, который вызовет метод объекта, если нам известно только адрес объекта и адрес метода.

M>На ассемблере то легко это сделать, а как на с++ ?

Есть в си++ операторы ->* и .*

struct test {
    void f(int) {}
};

int main() {
    test obj;
    test * ptr_obj = &obj;
    using t_member_fn = void (test::*)(int); // указатель на функцию член
    t_member_fn = mfn = &test::f;
    (ptr_obj->*mfn)(0); // вызов через указатель
    (obj.*mfn)(0);
    return 0;
}


Вроде так, не пробовал компилировать
Re[2]: Signals/Slots концепция
От: Sm0ke Россия ksi
Дата: 17.09.21 17:05
Оценка:
Да, оператор ->* может быть перегружен:
ссылка
Re[2]: Signals/Slots концепция
От: maks1180  
Дата: 20.09.21 00:30
Оценка:
S> using t_member_fn = void (test::*)(int); // указатель на функцию член
Так можно только функцию класса test использовать, а слот может быть в любом классе
===============================================
(реклама, удалена модератором)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.