Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу.
Желательно, что-бы работала на старых компиляторах.
Не могу понять как написать на с++ (без ассемблера) код, который вызовет метод объекта, если нам известно только адрес объекта и адрес метода.
На ассемблере то легко это сделать, а как на с++ ?
Здравствуйте, maks1180, Вы писали:
M>Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу. M>Желательно, что-бы работала на старых компиляторах.
Сигналы и слоты — подход, используемый в некоторых языках программирования и библиотеках (например, Boost, gtkmm и Qt) который позволяет реализовать шаблон «наблюдатель», минимизируя написание повторяющегося кода.
Здравствуйте, maks1180, Вы писали:
M>Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу. M>Желательно, что-бы работала на старых компиляторах.
У меня есть своя маленькая легкая библиотечка, которая делает всё что мне нужно как в QT, но там шаблонная магия, С++17 и небольшая завязка на потоки с синхронизацией, т.к. слоты без возможности вызовов из других потов не так полезны на практике.
M>Не могу понять как написать на с++ (без ассемблера) код, который вызовет метод объекта, если нам известно только адрес объекта и адрес метода. M>На ассемблере то легко это сделать, а как на с++ ?
Проще всего использовать готовыe примитивы: начать можно с std::invoke, std::apply и std::function. C помощью них сможешь организовать любые нужные тебе вызовы.
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Homunculus, Вы писали:
H>>Если делать совсем чисто как в Qt, то без тулзы типа moc не обойтись. Пост-процессинг кода
M>Только пре
Здравствуйте, Homunculus, Вы писали:
H>Если делать совсем чисто как в Qt, то без тулзы типа moc не обойтись. Пост-процессинг кода
Если не нужен real-time reflection, когда ты при компиляции вообще непонятно что вызываешь, то препроцессор не нужен. Всё остальное спокойно реализуется на шаблонах, почти с таким же синтаксисом как и Qt-шные сигнал-слоты.
Здравствуйте, maks1180, Вы писали:
M>Где найти реализацию Signals/Slots концепции — её я открыл для себя в QT и она очень мне понравилась. Но тащить из-за неё QT не могу. M>Желательно, что-бы работала на старых компиляторах.
Здравствуйте, 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;
}
S> using t_member_fn = void (test::*)(int); // указатель на функцию член
Так можно только функцию класса test использовать, а слот может быть в любом классе