Wir haben viele native C++ - Klassen, die unter Verwendung von boost :: serialization perfekt serialisiert werden.Ist es möglich, boost :: serialization mit einer verwalteten Klasse zu verwenden?
Jetzt wollen wir einige ihrer Mitgliederfelder zu Eigenschaft ändern, so konnten wir sie in PropertyGrids verwenden. Wenn wir die Klasse definiction zu ref Klasse X verändert, haben wir eine große Anzahl dieser Kompilierungsfehlern:
# 1: error C2893: Failed to specialize function template 'boost::archive::text_oarchive &boost::archive::detail::interface_oarchive<Archive>::operator <<(T &)' d:\someAddress\someFile.cpp 58
# 2: error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::_Smanip<_Arg> &)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'boost::archive::text_oarchive' d:\someAddress\someFile.cpp 58
Wir haben eine Menge winzige Klassen hier, also wäre es ein Schmerz, für jeden einen Wrapper zu schreiben! Hier
ist die Beispielklasse wir verwenden:
ref class gps_position2
{
public:
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & seconds;
}
public:
gps_position(){};
gps_position(float s)
{
this->seconds = s;
}
property float seconds;
};
Und hier ist der Haupttestcode:
int main()
{
std::ofstream ofs("out.txt");
gps_position2 g(24.567f);
// save data to archive
{
boost::archive::text_oarchive oa(ofs);
// write class instance to archive
oa << g;
}
// ................
return 0;
}
Ist es sogar möglich, boost :: Serialisierung mit verwalteten Klassen zu benutzen?
Edit:
Wenn wir die Klasse Verwendungscode, um diese Änderung:
...
gps_position2^ g = gcnew gps_position2(24.567f);
...
dann bekommen wir nur 1 Fehler:
error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' D:\path\to\Boost\boostw\boost\archive\detail\check.hpp 60
Tritt das Problem weiterhin auf, wenn die Eigenschaft entfernt wird (aber die Klasse bleibt eine ref-Klasse)? – CiscoIPPhone
Können Sie stattdessen .NET-Serialisierung verwenden? C++ und C++ - CLI sind nicht die gleiche Sprache. Obwohl sie sich bis zu einem gewissen Grad vermischen können, ist Boost für C++, nicht für C++ - CLI. –
@CiscolPPhone: Ja, es bleibt immer noch. @Merlyn Morgan-Graham: Nein, wir müssen Boost: Serialisierung im Hauptcode (in nativem C++) verwenden, dieser Code ist nur ein Werkzeug für das Hauptprogramm. – Sayyid