我正在嘗試在C++ Builder應用程序中使用SuperObject進行JSON編組。使用C++ Builder類型的Delphi泛型
超對象有一些通用的功能,以幫助這一點:
TSuperRttiContext = class
...
function AsType<T>(const obj: ISuperObject): T;
function AsJson<T>(const obj: T; const index: ISuperObject = nil): ISuperObject;
end;
在生成.HPP,它們出現的了。
class PASCALIMPLEMENTATION TSuperRttiContext : public System::TObject
{
...
template<typename T> T __fastcall AsType(const _di_ISuperObject obj);
template<typename T> _di_ISuperObject __fastcall AsJson(const T obj, const _di_ISuperObject index = _di_ISuperObject());
};
目前爲止還不錯。我可以編譯這樣的代碼
TMyObject * myObject = ...;
_di_ISuperObject obj = superRttiContext->AsJson(myObject);
String s = obj->AsString();
但是,我無法鏈接它。現在
[ILINK32 Error] Error: Unresolved external 'System::DelphiInterface<Superobject::ISuperObject> __fastcall Superobject::TSuperRttiContext::AsJson<TMyObject *>(const TMyObject * const, const System::DelphiInterface<Superobject::ISuperObject>)' referenced from C:\FOO.OBJ
,這並不完全出乎意料:該Embarcadero DocWiki says this will happen如果模板未在德爾福代碼實例化。
但是,這裏的問題 - TMyObject
是C++對象從TObject
後裔,所以我不能看到如何實例從Delphi代碼模板。
任何想法?
您可以在C++中使用JSON讀寫器;請參閱http://stackoverflow.com/questions/3512650/fastest-json-reader-writer-for-c –
你可以在Delphi中創建一個類似的對象來代替TMyObject,然後使用生成的C++等價物。 hpp文件? – nachbar