Ich habe std::type_index
verwendet, um eine std::unordered_map<std::type_index, MyProperty>
in MyClass
zu speichern. Jetzt möchte ich (mit boost :: serialization) MyClass
serialisieren. Der Compiler sagt struct std::type_index has no member named serialize
, die angibt, dass boost :: serialisierung std::type_index
nicht unterstützt. Die Frage ist also, was in diesem Fall zu tun ist? Hat jemand eine serialize
Funktion für std::type_index
? Oder gibt es ein anderes Objekt, das für den Schlüssel für diese map
verwendet werden kann, die ich brauche, die bereits serialisierbar ist, die die gleiche Art von Sache tun können. Wenn nämlich eine Funktion Vorlage tun I:Serialisierung `std :: type_index`
template <typename T>
void MyClass::func(T)
{
myMap.find(std::type_index(typeid(T)));
}
Hier eine Demo des Mangels an Unterstützung ist:
#include <boost/archive/text_oarchive.hpp>
#include <fstream>
#include <typeindex>
int main()
{
std::type_index myTypeIndex = typeid(double);
std::ofstream outputStream("test.txt");
boost::archive::text_oarchive outputArchive(outputStream);
outputArchive << myTypeIndex;
outputStream.close();
return 0;
}
Gefahr. Minenfeld voraus. Sie möchten etwas indizieren, das Sie konstruieren können, und nicht etwas, das vom Compiler erstellt wird. Leider müssen Sie einen eigenen polymorphen, serialisierbaren Wrapper um Typid erstellen. –
@RichardHodges Sie sagen mit 'std :: unordered_map' im Allgemeinen ist eine schlechte Idee? Oder nur wenn es serialisiert werden muss? –
Nein, type_index ist so konzipiert, dass Sie als Index verwendet werden können. Es ist einfach nicht kompatibel mit boost :: serialize, weil Sie die Konstruktion nicht kontrollieren. Sie müssen zumindest benutzerdefinierte Lade-/Speicherfunktionen dafür bereitstellen. –