OK, prima di darmi una lezione sull'uso delle funzioni variadiche in C in C++ ... tutto il resto si è rivelato necessario per non dover riscrivere il Qt MOC.Funzioni QT e variad.
Quello che mi piacerebbe sapere è se è possibile avere uno "slot" in un oggetto Qt che accetta una quantità/tipo di argomenti arbitrari. Il fatto è che voglio davvero essere in grado di generare oggetti Qt dotati di slot di una firma arbitraria. Poiché il MOC è incompatibile con la preelaborazione standard e con i modelli, non è possibile farlo con un approccio diretto. Ho appena si avvicinò con un'altra idea:
struct funky_base : QObject
{
Q_OBJECT
funky_base(QObject * o = 0);
public slots:
virtual void the_slot(...) = 0;
};
Se questo è possibile, allora, perché si può fare un modello che è una sottoclasse di un oggetto QObject derivato fino a quando non si dichiara novità Qt in esso, Dovrei essere in grado di implementare un tipo di modello derivato che prende il materiale ...
e lo trasforma nei tipi appropriati e previsti.
Se lo è, come posso collegarmi ad esso? Funzionerebbe?
connect(x, SIGNAL(someSignal(int)), y, SLOT(the_slot(...)));
Se nessuno ha provato nulla questa folle e non sa fuori mano, sì, io alla fine provo io stesso ... ma sto sperando che qualcuno ha già conoscenze esistenti posso toccare prima eventualmente di sprecare il mio tempo su esso.
La domanda è stata un tentativo di trovare un modo per progettare un 'catch-all' classe base per un oggetto basato su modelli che potrebbe tradursi segnali Qt in segnali statici come boost :: signals2 o funzioni solo di base. Ho pensato che se potessi costruire uno slot con modelli variadici, potrei usare TMP per ricostruire i parametri al di fuori dei va_args. La risposta al problema è stata esattamente la stessa, ma taglia PRIMA che lo slot venga chiamato dal meccanismo qt. La prima rata di una serie di articoli su come rendere il tutto ha mostrato come ho risolto questa parte del problema:
http://crazyeddiecpp.blogspot.com/2011/01/quest-for-sane-signals-in-qt-step-1.html
Questa è la mia posizione vecchia blog. Una nuova è nel mio profilo se vuoi vedere altri strani sh1t.
NVM, ho risposto alla mia domanda. Qt ovviamente non è nemmeno in grado di farlo. –
Con gli slot non tipizzati stai dando via uno dei vantaggi principali del linguaggio ... la sicurezza del tipo in fase di compilazione. –
Frank, franco, franco. Qt lo ha già fatto. Sto cercando di recuperare la sicurezza del tipo. Questo è stato un tentativo fallito. Vedi il mio blog per l'eventuale storia di successo (è sul mio profilo). –