知道C ++没有反射,我看了看Delphi技术,发现了一个使用REST.JSON
库进行序列化的示例:Convert Object to JSON ...
现在,我想在我的C ++代码中使用一个Delphi类,该类可以使用提供的方法进行序列化和反序列化:
TFoo = class(TObject)
private
public
Fa: Integer;
Fb: Double;
end;
在C ++单元中,类被序列化和反序列化,如下所示:
#include <REST.Json.hpp>
#include "TestJson.hpp" //Contains TFoo
TFoo* foo = new TFoo();
foo->Fa = 1;
foo->Fb = 0.999;
String json = TJson::ObjectToJsonString(foo); //Works
delete foo;
foo = TJson::JsonToObject<TFoo*>(json); //Doesn't work
delete foo;
序列化工作正常,但是调用TJson::JsonToObject
会导致链接器错误。一点研究表明,在将Delphi泛型与C ++ How to Handle Delphi Generics in C++结合使用时,这是可以预期的。
它说实例化必须在Delphi端完成,所以我在Delphi单元中添加了一个函数:
function GetObj(Json: string) : TFoo;
begin
Result := TJson.JsonToObject<TFoo>(Json);
end;
此链接有效后,但在运行代码时发生以下错误:
... EConversionError ...无法初始化类型TestJson.TFoo ...
从另一个Delphi单元调用该函数时,它可以正常工作。
调试Embarcadero代码表明,这是由于缺少类型信息而发生的。
有什么办法可以使它正常工作吗?