OK, przed wykładaniem mnie na temat używania funkcji variadycznych w stylu C w C++ ... wszystko inne okazało się wymagać przepisania Qt MOC.Funkcje Qt i variadic
Chciałbym wiedzieć, czy możesz mieć "slot" w obiekcie Qt, który pobiera arbitralną ilość/typ argumentów. Chodzi o to, że naprawdę chcę móc generować obiekty Qt, które mają sloty arbitralnego podpisu. Ponieważ MOC jest niekompatybilny ze standardowym preprocesingiem i szablonami, nie można tego zrobić za pomocą bezpośredniego podejścia. Ja po prostu wymyślił inny pomysł:
struct funky_base : QObject
{
Q_OBJECT
funky_base(QObject * o = 0);
public slots:
virtual void the_slot(...) = 0;
};
Jeśli jest to możliwe, to, ponieważ można zrobić szablon, który jest podklasą obiektu QObject pochodzącej tak długo, jak nie deklaruje nowy Qt rzeczy w nim, Powinienem być w stanie zaimplementować szablon oparty na szablonach, który pobiera rzeczy o nazwach ...
i zamienia je w odpowiednie, oczekiwane typy.
Jeśli tak, jak się z nim połączyć? Czy to działa?
connect(x, SIGNAL(someSignal(int)), y, SLOT(the_slot(...)));
Jeśli nikt nie próbował niczego to szalony i nie zna się za rękę, tak ja w końcu spróbować to sam ... ale mam nadzieję, że ktoś ma już istniejąca wiedza mogę dotknąć zanim ewentualnie tracę czas na to.
Ta kwestia była próba znalezienia sposobu zaprojektowania klasy „catch-all” bazy na matrycy obiektu, który może przełożyć Qt sygnałów na sygnały statycznych takich jak boost :: signals2 czy tylko podstawowe funkcje. Pomyślałem, że gdybym mógł zbudować slot, który miał szablony variadyczne, mógłbym użyć TMP do zrekonstruowania parametrów z va_args. Odpowiedź na to pytanie polegała właśnie na tym, ale przed wprowadzeniem automatu Qt do gry zadzwoni. Pierwsza rata w serii artykułów na temat jak uczynić całość pokazał mi jak rozwiązać tę część problemu:
http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html
To mój stary lokalizację blogu. Nowe w moim profilu, jeśli chcesz zobaczyć inne dziwne sh1t.
NVM, odpowiedziałem na własne pytanie. Qt oczywiście nie jest w stanie tego zrobić. –
Posiadając niezapisane gniazda, dajesz jedną z podstawowych zalet języka ... bezpieczeństwo podczas kompilacji. –
Frank, szczery, szczery. Qt już to zrobiło. Próbuję odzyskać bezpieczeństwo typu. To była jedna, nieudana próba. Zobacz mój blog na temat ewentualnej historii sukcesu (jest na moim profilu). –