gpt4 book ai didi

visual-c++ - 是否可以将 boost::serialization 与托管类一起使用?

转载 作者:行者123 更新时间:2023-12-04 08:25:51 26 4
gpt4 key购买 nike

我们有很多使用 完美序列化的原生 C++ 类。 boost::序列化 .

现在我们想将他们的一些成员字段更改为 属性(property) ,所以我们可以在 中使用它们属性网格 .当我们将类定义更改为 时引用 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;
}

甚至可以使用 boost::序列化与托管类?

编辑:

如果我们将类使用代码更改为:
    ...
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

最佳答案

我知道你说过你不想打包所有的类(class)。但是,与其将所有类都包装在 C++/CLI 中,不如开发一个非托管 C++ dll 并公开所有相关函数。然后您可以使用 P/Invoke从托管代码(例如 C++/CLI)调用非托管 dll。不确定这是否可行。

关于visual-c++ - 是否可以将 boost::serialization 与托管类一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4062796/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com