У нас есть много родных классов C++, которые отлично сериализуются с использованием boost :: serialization.Можно ли использовать boost :: serialization с управляемым классом?
Теперь мы хотим изменить некоторые из своих полей членов собственности, чтобы мы могли использовать их в PropertyGrids. Когда мы изменили класс definiction к реф класса X, мы получили огромное количество этих ошибок компиляции:
# 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
У нас есть много здесь крошечные классы, поэтому было бы больно написать обертку для каждого из них!
Вот класс образца мы использовали:
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;
};
А вот главный тестовый код:
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;
}
ли даже можно использовать подталкивание :: сериализации с управляемыми классами?
Edit:
Если мы изменим код использования класса для этого:
...
gps_position2^ g = gcnew gps_position2(24.567f);
...
тогда мы получим только 1 ошибка:
error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' D:\path\to\Boost\boostw\boost\archive\detail\check.hpp 60
Возникает ли проблема, когда свойство удаляется (но класс остается классом ref)? – CiscoIPPhone
Вместо этого вы можете использовать сериализацию .NET? C++ и C++ - cli - не один и тот же язык. Хотя они могут в некоторой степени смешивать, boost для C++, а не C++ - cli. –
@CiscolPPhone: Да, это все еще остается. @Merlyn Morgan-Graham: Нет, нам нужно использовать boost: сериализация в основном коде (в родном C++), этот код является только инструментом для основной программы. – Sayyid