13.07.2015 Views

Caché での C++ の使用法

Caché での C++ の使用法

Caché での C++ の使用法

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

ダイナミック・バインディングd_int val(in);ここで、in は t_istream のタイプです。値 がオブジェクトである 場 合 、t_istream はその OREF とクラス 名 を 含 みます。つまり、Database オブジェクトも 必 要 であることを 意 味 します。コンパイル 時 に 返 されるオブジェクトのタイプがわかっている 場 合 は、そのタイプの openref() メソッドを 使 用 することもできます。 例 えば、Sample.Person タイプのオブジェクトが 返 される 場 合 、そのオブジェクトは 以 下 のように 構 築 できます。d_ref p = Sample_Person::openref(db, d_int(in));d_int(in) は、OREF を 含 む 一 時 的 な d_int 値 を 生 成 し、d_int 値 を int に 変 換 します。それ 以 外 の 場 合 は、 以 下 のように構 築 できます。d_ref p = Dyn_obj::openref(in, db);オブジェクトのタイプは、 入 力 ストリームから 読 み 取 ります。init() メソッドのシグニチャは、 他 の D_type インスタンスからのコンストラクタと 一 致 しますが、Database ポインタが 0 でない 場 合 は 一 致 しません。4.3 プロパティとメソッド一 度 Dyn_obj プロキシを 構 築 すると、これを 使 用 してプロパティ 値 を 取 得 して 設 定 し、クエリを 実 行 し、メソッドを 実 行 することができます。t_istream& get_property(const_name_t prop_name);void set_property(const_name_t prop_name, D_type* val);void get_query(const_name_t query_name, d_query& query) const;// const_name_t is a typedef for const wchar_t*メソッドを 実 行 するには、 引 数 へのポインタ (D_type*) の 配 列 と 引 数 の 数 をそのメソッドに 渡 す 必 要 があります。 以 下 のように、Database オブジェクトにより 割 り 当 てられたバッファを 使 用 できます。D_type* args[2];args[0] = &arg1;args[1] = &arg2;// codeこれは、max_num_obj_args ポインタ ( 引 数 の 最 大 許 容 数 ) を 格 納 できます。run_obj_method() のシグニチャは、 以 下 のとおりです。t_istream& run_obj_method(const_name_t mtd_name,D_type** args,int num_args);// const_name_t is a typedef for const wchar_t*クラス・メソッドを 実 行 するには、 以 下 の run_class_method() を 使 用 できます。static t_istream& run_class_method(Database* db,const_name_t cl_name, // const_name_t is a typedef for const wchar_t*const_name_t mtd_name,D_type** args,int num_args);参 照 により 渡 される 引 数 の 値 は、これらのメソッド 内 部 で 変 更 されます。 以 下 はその 例 です。const_name_t cl_name = __NAME_V(Sample.Person);D_type* args[2];32 <strong>Caché</strong> <strong>での</strong> <strong>C++</strong> の 使 用 法

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!