锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓嶈兘澶氱戶鎵跨被錛屼絾鏄彲浠ユ彁渚涗竴縐嶆洿濂界殑鍔炴硶灝辨槸澶氱戶鎵挎帴鍙c?/p>
Class淇℃伅 浣犲彲浠ュ畾涔変笉絎﹀悎acdk瑙勮寖鐨勭被鍨嬪凡緇忕粨鏋勭瓑錛屼絾鏄細(xì)澶卞幓acdk鎻愪緵鐨勪竴浜涚壒鎬с?/p>
浣跨敤浠栫殑cfg鑴氭湰寮曟搸鍋氫簡(jiǎn)涓涓猟emo錛岃В鏋愬櫒銆?br>
code錛?br>
int acdkmain(RStringArray args)

{
try
{
RString code = new String();
::acdk::cfgscript::RScript script = new ::acdk::cfgscript::Script("<mem>");
::acdk::cfgscript::RProps props = new ::acdk::cfgscript::Props();
while(code->compareToIgnoreCase("exit") != 0)
{
System::out->print("wlw:>");
code = System::in->readLine();
if(!code->endsWith(";"))
{
code = code + ";";
}
code = "wlw="+code;
script->eval(code, &props, ::acdk::cfgscript::ScriptReadWriteParent);
RString val = props->getEvaluatedStringVal("wlw");
System::out->print(" ");
System::out->println(val);
System::out->println("=====================================");
}
}
catch(RThrowable ex)
{
}
return 0;
}
鏁堟灉錛?br>
]]>
ACDK鏈韓灝辨槸鍩轟簬鍏冧俊鎭細(xì)涓涓敮鎸佹寲鎺樼被灞傛緇撴瀯錛屽瓧孌碉紝鏋勯狅紝鏂規(guī)硶鐨勯珮綰х増鏈殑RTTI銆傚搴斾笌java鍜?net鐨勫弽灝勬満鍒躲?br>
鍏冧俊鎭彲浠ョ敤鏉ユ彁渚涘瀮鍦懼洖鏀躲佸姩鎬佸姞杞界被錛屽簭鍒楀寲錛岄檮鍔犵敤鎴瘋嚜瀹氫箟灞炴э紝榪愯鏈熷姩鎬佽闂璞$殑鍚勪釜鏂歸潰淇℃伅銆傛垜鐨勭悊瑙etainfo灝辨槸瀵圭被鏈韓鐨勪竴縐嶈В鏋愶紝瀵圭紪紼嬭璦鐨勪竴縐嶅紑鏀懼紡鎵╁睍銆?br>
鍏冧俊鎭紙Metainfo錛夛紳錛濆弽灝勶紙Reflection錛?br>緙栫▼璇█涓殑鍏冧俊鎭氨鏄湪緙栫▼璇█涓瓨鍦ㄤ竴縐嶈繍琛屾湡緙栫▼璇█鐨勭被鍨嬬殑鍐呴儴鏋勯犱俊鎭?br>寰堝瑙i噴鍨嬭璦渚濊禆鍏冧俊鎭潵鏋勯犲鍚堢被鍨嬶紝璞isp鍜宲erl銆傝繖浜涜璦涓渶閲嶈鐨勫氨鏄厓淇℃伅鎴栬呭弽灝勬満鍒訛紝涔熷瓨鍦ㄤ簬java鍜?net涓?br>
褰撶劧寰堝緙栬瘧鍣ㄥ彧鏈夋湁闄愮殑鍏冧俊鎭満鍒訛紝璞++鐨凴TTI銆備綘鍙互鍙戠幇錛屼綘鑳藉閫氳繃typeinfo鑾峰彇綾葷殑鍚嶅瓧錛屼粎姝よ屽凡錛屾棤娉曡幏寰楁柟娉曪紝鎴愬憳錛屽弬鏁扮瓑絳夈傚綋鐒禼om鎶鏈儴鍒嗗疄鐜頒簡(jiǎn)metainfo錛屾柟娉曪紝鎴愬憳錛屽弬鏁拌繖浜涢兘鍙互浠庣被鍨嬪簱涓幏鍙栵紝浣嗘槸浠嶇劧鏃犳硶鑾峰彇鍐呴儴鏋勯犱俊鎭?br>
鐢變簬C++綾誨瀷緋葷粺鐨勫鏉傛э紝瀹冩湰韜病鏈夊疄鐜板弽灝勬満鍒躲傝繎騫存潵鏈閲嶈鐨勪袱縐嶈璦java鍜孋#瀹炵幇浜?jiǎn)鍙崬畡鏈哄堄灱寴q欎袱縐嶈璦鐨勭被鍨嬬郴緇熻綆鍗曞緢澶氾紝浠栦滑閮芥姏寮冧簡(jiǎn)C++涓櫐娑╃殑閮ㄥ垎錛岃繖鏄潪甯稿ソ鐨勫仛娉曪紝鎴戣寰桟++紼嬪簭鍛樼殑澶ч儴鍒嗘椂闂撮兘鑺卞湪榪欎簺浜嬫儏涓娿?br>
浣跨敤ACDK鐨勫厓淇℃伅
鍏冧俊鎭駭鍒?br>
1銆佹棤鍏冧俊鎭?br>鍋囧浠呬粎鍒╃敤ACDK妗嗘灦鏋勯犵被錛屾棤闇鑴氭湰璋冪敤錛屽姩鎬佸姞杞斤紝綾諱腑鍙互涓嶆坊鍔犲厓淇℃伅
ACDK_DECL_CLASS(MyClass);
class MyClass : extends acdk::lang::Object, implements acdk::lang::Comparable

{
private:
RString _myString;
public:
MyClass() : _myString("hello")
{}
int compareTo(IN(RObject) other)
{
return 0; // always equal
}
int foo()
{ return _myString->length(); }
};
// using it
RMyClass myClass = new MyClass();
2銆佸熀鏈殑鍏冧俊鎭?br>綾繪淳鐢熺粨鏋?br>瀹炵幇浜?jiǎn)ClassLoader鍔熻兘
3銆佹墿灞曠殑鍏冧俊鎭?br>鍙嶅皠
搴忓垪鍖?br>鑴氭湰璋冪敤
4銆佸姩鎬佹柟娉曡皟鐢ㄤ唬鐞?br>鍏佽鑴氭湰璇█浣跨敤C++鎺ュ彛
C++綾繪淳鐢燂紝铏氭柟娉曢噸鍐?br>
瀹炵幇浜?jiǎn)鍏冧俊鎭殑ACDK綾誨彲浠ラ氳繃鍚嶅瓧鏉ュ畾浣嶅茍鍔犺澆銆?br>
鍘熸潵.net涓被鍨嬬殑灞炴т俊鎭氨鏄彲浠ョ敤鏉ュ疄鐜癆OP鐨勫挌鍜氾紵錛燂紵錛熷鐨勶紝灝眛md鎵蹇靛晩銆傛悶寰楁垜鐜板湪鎵嶅紕鏄庣櫧榪欎釜姒傚康銆?br>
]]>
]]>
1銆佸熀鏈ā鍨?br> 鍩烘湰綾誨瀷 Object瀵硅薄灝佽 浣嶆暟(bit)
bool Boolean 8
char Character 8
uc2char UnicodeCharacter 16
uc4char UnicodeCharacter 23
byte Byte 8
short Short 16
int Integer 32
jlong Long 64
float Float 32
double Double 64
2銆丒num綾誨瀷
浣跨敤C++鐨別num錛屽亣濡傞渶瑕佽冭檻ACDK鐨勫厓緙栬瘧錛岄渶瑕佷嬌鐢ㄥ畯錛欰CDK_DECL_ENUM錛岀敤鏉ユ彁渚涘厓淇℃伅銆傚姩鎬佸簱闇瑕佸鍑虹被鍨嬬殑鏃跺欙紝浣跨敤ACDK_DEF_LIB_ENUM銆備笉鐗墊壇鍒板厓淇℃伅鐨凟num綾誨瀷鍙互鍦ㄥ畾涔夌殑鏃跺欎嬌鐢╢oreign鍏抽敭瀛椼?br>
3銆佸璞$被鍨?br> 蹇呴』鐩存帴鎴栬呴棿鎺ヤ粠Object媧劇敓
// declare the R-type RLegalAcdkClass
// and the Array type LegalAcdkClassArray and RLegalAcdkClassArray
ACDK_DECL_CLASS(LegalAcdkClass);
// The class itself:
class LegalAcdkClass : extends acdk::lang::Object // extend the Object class

{
ACDK_WITH_METAINFO(LegalAcdkClass); // optional, for class information see Metainfo
private:
RString message;
public:
// constructor
LegalAcdkClass() : Object() , message("")
{
}
// a method
RString getMessage()
{
return message;
}
};
// declare the R-type RLegalAcdkClass
// and the Array type LegalAcdkClassArray and RLegalAcdkClassArray
ACDK_DECL_CLASS(LegalAcdkClass);
// The class itself:
class LegalAcdkClass : extends acdk::lang::Object // extend the Object class
, implements acdk::lang::Comparable // implements the interface

{
ACDK_WITH_METAINFO(LegalAcdkClass) // optional, for class information see Metainfo
private:
RString message;
public:
// implement the Comparable interface method
int compareTo(IN(RObject) other)
{
return getMessage()->compareTo(RLegalAcdkClass(other)->getMessage());
}
RString getMessage()
{ return message; }
};
RStringBuffer sb1 = new StringBuffer("ACDK");
RStringBuffer sb2 = new StringBuffer("JAVA");
RClass cls1 = sb1->getClass();
RClass cls2 = sb2->getClass();
assert(cls1 == cls2); // always true
ACDK鐨勫紓甯告崟鑾烽渶瑕佹敞鎰忥細(xì)
void foo()

{
try
{
} catch (acdk::io::RIOException ex)
{
// handle here type of IOException.
} catch (RThrowable ex)
{
// handle all other ACDK exceptions
}
/**//* DONT DO THAT
otherwise Nullpointer exception will not handled properly
} catch (
) {
// this are not ACDK exception
// for example std::exception, if you use STL
}
*/
}
鏂規(guī)硶鍙傛暟緙虹渷浼犻掓柟寮忔槸錛?br>a銆佸熀鏈被鍨?int,float,char,etc)鎸夊間紶閫?br>b銆乪num鎸夊?br>c銆佺被鍜屾帴鍙f寜寮曠敤浼犻?br>d銆佹暟緇勬寜寮曠敤浼犻?br>
鍙傛暟鐨刬n,out,inout
void foo(IN(RStringBuffer) buffer, int len)

{
//buffer = new StringBuffer(); // caller not be effected, RStringBuffer isn't changed
buffer->append("asdf"); // caller be effected.
len = 42; // caller not be effected
}
// is equivalent to
//void foo(RStringBuffer buffer, int len);
void use_foo()

{
RStringBuffer sb = new StringBuffer("");
RStringBuffer sbs = sb;
int value = 1000;
foo(sb, value);
//value == 1000 && sb == sbs
// sb->toString() == "ACDK"
}
void foo(OUT(RStringBuffer) buffer, OUT(int) len)

{
// buffer is unitialized here
buffer = new StringBuffer(1024);
// buffer is now initialed;
buffer->append("ACDK");
len = buffer->length();
}
RString use_foo()

{
RStringBuffer sb;
int len;
foo(sb, len);
System::out->println("Buffer is [" + sb->toString() + "] len = " + len);
return sb->toString();
}
]]>
// this is a NON ACDK class
class AClass

{
int _val;
public:
AClass() : _val(42)
{
}
// a NON ACDK class can make usage of ACDK classes.
RString get()
{
RStringBuffer sb = new StringBuffer();
sb->append(_val);
return sb->toString();
}
};
2銆佺被鍨嬪畾涔?br> 涓轟簡(jiǎn)鑾峰緱ACDK妗嗘灦鐨勭殑涓浜涚壒鎬э紙鍨冨溇鍥炴敹錛屽簲鐢ㄤ簬闆嗗悎銆佸弽灝勪互鍙?qiáng)鑴氭湰涓{夛級(jí)錛屼綘鐨勭被鍨嬪畾涔夐渶瑕佹弧瓚充互涓嬪嚑涓潯浠訛細(xì)
a銆佹墍鏈夊彲瀹炰緥鍖栫殑綾誨繀欏葷洿鎺ユ垨鑰呴棿鎺ユ淳鐢熶簬acdk::lang::Object
b銆佷笉榪愯澶氶噸緇ф壙鑷猘cdk::lang::Object
c銆佹帴鍙g被鏄函铏氱被
d銆佺被鍙互瀹炵幇鍑犱釜鎺ュ彛
渚嬪錛?br>綾誨畾涔夛細(xì)
ACDK_DECL_CLASS(AClass);
class AClass : extends acdk::lang::Object

{
int _val;
public:
AClass(int number) : Object(), _val(number)
{
}
};
RAClass aclass = new AClass(42);
鎺ュ彛瀹氫箟錛?br>
ACDK_DECL_INTERFACE(AInterface);
class AInterface ACDK_INTERFACEBASE

{
public:
virtual void doIt(IN(RString) arg) = 0;
};
褰撶劧錛屼負(fù)浜?jiǎn)鍒╃敤ACDK瀵硅薄妯″瀷鐨勫厓鐗規(guī)э紙璞″簭鍒楀寲銆佸瀮鍦懼洖鏀訛紝鑴氭湰璋冪敤錛夛紝蹇呴』鍦ㄧ被涓坊鍔犲厓淇℃伅錛圡etainfo錛夈?
]]>
#include <acdk.h>
#include <acdk/lang/System.h>
#pragma warning
//static
int acdkmain(RStringArray args)

{
try
{
}
catch(RThrowable ex)
{
}
return 0;
}



int main(int argc, char* argv[], char** envptr)

{
return acdk::lang::System::main(acdkmain, argc, argv, envptr);
}
涓嬬彮浜?jiǎn)锛屾病鏃堕棿鍐欎簡(jiǎn)锛屾檿銆傜涓涓紝鐪嬩笉鍑哄お澶у尯鍒?
Go on...... 褰撶劧浠諱綍鎶鏈彁渚涙湇鍔$殑鍚屾椂錛屼綘蹇呴』閬靛畧瀹冪殑涓浜涚帺娉曘備笅闈㈡槸涓浜涘垵姝ュ皾璇曪紝璧伴┈瑙傝姳榪囦竴浜涘熀鏈蹇碉紝鐪嬬湅鏈鍩烘湰鐨勭壒鎬с?br>
鍒涘緩瀵硅薄錛?br>RStringBuffer sb = new StringBuffer();
acdk瀹炵幇浜?jiǎn)鍩轰簬寮曠敤鎶鏈殑鑷姩鍐呭瓨綆$悊鏂瑰紡錛屽綋鐒朵綘寰楁寜鐓у畠鐨勮鍒欐潵鐜╋細(xì)鍗充嬌鐢≧綾葷殑寮曠敤瀵硅薄鎶婂師鐢熺殑瀵硅薄鎸囬拡Hold浣忥紝鐪嬭搗鏉ヨ繕綆楄垝鏈嶃傚綋鐒惰皟鐢ㄦ柟娉曚綘灝卞緱浣跨敤鎸囬拡鏉ユ搷浣滐紙絎﹀悎C++涔?fàn)鎯Q夛細(xì)
sb->append("Hi");
璋冪敤闈?rùn)鎬佹柟娉曪細(xì)
RString str = String::valueOf(3.4);
瀵硅薄鐨勫紩鐢ㄦ妧鏈負(fù)0鐨勬椂鍊欙紝浼?xì)鑷姩閿姣併傞氬父鏄鏁板璞″嚭浣滅敤鍩熸垨鑰呰祴鍊糔il鐨勬椂鍊欙紝鍙互閿姣佸璞°?br>
寰堣嚜鐒剁殑錛孯緋誨垪鐨勫璞¢兘絎﹀悎寮曠敤鍘熷垯錛屽嵆璧嬪肩殑鏃跺欙紝浠呬粎鏀瑰彉鍐呴儴鍘熷_ptr鎸囬拡浠ュ強(qiáng)寮曠敤璁℃暟錛?br>
RStringBuffer sb1 = new StringBuffer("A");
RStringBuffer sb2 = sb1; // sb2 contains the same StringBuffer instance
sb2->append("C");
sb1->append("DK"); // StringBuffer now contains "ACDK"
鍋囧鎯蟲(chóng)嫹璐濅竴浠藉唴閮ㄥ璞★紝鍙互榪欐牱錛?br>
RStringBuffer sb2 = sb1->clone()
涓鑸儏鍐典笅錛屾柟娉曠殑鍙傛暟浠ュ強(qiáng)榪斿洖鍊肩被鍨嬩嬌鐢ㄥ紩鐢ㄧ被鍨嬶紝鍗砇綾伙細(xì)
RInteger myParse(RStringBuffer arg)

{
RString str = arg->toString();
RInteger erg = new Integer(Integer::parseInt(str));
return erg;
}
]]>