Questa è una domanda teorica. Diciamo che ci sono alcuni oggetti che, tra gli altri, contengono elenchi di funzioni di callback abbonati agli eventi di quegli oggetti. Ora vogliamo archiviare questi oggetti sul disco. È un serializzabile std::function
?È possibile serializzare la funzione std ::?
risposta
No.
Ogniqualvolta utilizzando cancellazione di tipo (cioè nascondono dettagli implementativi dietro un'interfaccia), le sole operazioni disponibili senza conoscere il tipo dinamico dell'oggetto sono quelle previste dall'interfaccia.
Non c'è serializzazione standard C++, e non c'è modo semplice per serializzare funzioni o (senza riflessione), quindi l'interfaccia std::function
non fornisce serializzazione.
D'altra parte, nulla impedisce di di utilizzare una classe di base Callback
che fornisce il supporto di serializzazione.
Sì, lo è e no, non lo è. In teoria, è possibile serializzare i dati su cui verrà eseguito l'oggetto funzione, ma sarà comunque necessario compilare il codice, poiché non è possibile eseguire i dati senza ricorrere a brutti hack.
std::function
è un tipo di oggetto di cancellazione che obbedisce alla semantica del valore. Espone copia/sposta la costruzione e l'assegnazione e l'esecuzione di una particolare firma e distruzione.
Nessuno di questi è la serializzazione.
Internamente, la tipica implementazione di std::function
è creare un'implementazione helper template
classe sua costruzione-da argomento, che avvolge le operazioni sopra sull'argomento, poi i std::function
si delega sua attuazione di tali operazioni all'oggetto helper.
Il layout di quell'oggetto helper dipenderà dal layout dell'argomento costruito (in quanto la sua esistenza è facoltativa e la sua implementazione dipende dall'implementazione).
Si potrebbe provare a creare un oggetto simile che supporti la serializzazione, ma un oggetto di cancellazione del tipo si basa sul fatto che il tipo da cancellare già implementa l'operazione in questione. Il che significa che è possibile solo costruire un tipo cancellato da una funzione con serializzazione da un oggetto che supporta l'interfaccia funzione-con-serializzazione almeno a livello di ducktype.
- 1. std :: funzione come richiamata, è possibile annullare la registrazione?
- 2. spinta serializzare e std :: shared_ptr
- 3. È possibile serializzare automaticamente un oggetto C++?
- 4. Come serializzare la funzione sympy lambdified?
- 5. È possibile scrivere una funzione per std :: string e std :: wstring?
- 6. È possibile annidare la funzione all?
- 7. Perché la funzione std :: function non è uguaglianza?
- 8. PDOException: non è possibile serializzare o unserializzare istanze PDO
- 9. non possibile serializzare/Deserialize ArrayList
- 10. È possibile usare std :: accumulate con std :: min?
- 11. È possibile serializzare Json.NET per lo streaming con Formattazione?
- 12. In Protobuf-net, è possibile serializzare le classi non decorate?
- 13. Può std :: call std :: oggetti funzione asincrona?
- 14. Perché non è possibile serializzare una tupla in C#?
- 15. `std :: enable_if` è puntatore di funzione - come?
- 16. C++ std :: funzione simile
- 17. Qual è la ragione per `std :: make_tuple`?
- 18. Qual è la differenza tra std :: transform e std :: for_each?
- 19. Qual è la differenza tra std :: function e std :: mem_fn
- 20. Possibile overflow con std :: accumulate
- 21. È possibile usare std :: make_unique con l'interfaccia astratta?
- 22. std :: funzione e il comportamento
- 23. come serializzare la classe?
- 24. Come std :: funzione opera
- 25. base64_encode e serializzare funzione php PARAMS
- 26. Sulla funzione std :: abs
- 27. È possibile serializzare la variabile oggetto Javascript e archiviare nei cookie?
- 28. std :: funzione e std :: packaged_task conversione
- 29. Serializzare una funzione python con dipendenze
- 30. std :: result_of semplice funzione
Vagare un po 'troppo "in pratica": è probabilmente * possibile * serializzare i puntatori di funzioni raw e cose come FastDelegate, ma avrete un sacco di correzioni. http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible mostra alcune delle diverse implementazioni dei puntatori di funzione in fase di esecuzione. Aggiungi più complessità da os e loader - ad es. oggetti condivisi e ASLR. Piuttosto un compito Mi piacerebbe leggere gli hack compilatori + specifici della piattaforma nella fascia bassa; anche soluzioni manuali (abbiamo usato enum-> func LUT per i metodi statici). – leander
Bene, 'std :: function' non può nemmeno essere paragonato (' operator == 'et al.) Ad un altro' std :: function', quindi la serializzazione sarebbe un allungamento. – dalle