掲示板一覧   -   トピック一覧
   EA ソースコード生成・コード生成テンプレート
     C言語でのインナークラス(構造体)のコード生成方法は?


スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 トピック
sugimoto
投稿日時: 2010-7-15 14:15
EA Administrator
投稿: 1992

C言語でのインナークラス(構造体)のコード生成方法は?

○ご質問

C言語で以下のような構造体をクラスのインナークラスとしてコード生成する
にはどうすればよいのでしょうか?

・sample.h
--------------------------
typedef struct Hoge
{
int x;
} HOGE;

HOGE hoge getHoge()
void setHost(HOGE* hoge);
--------------------------

struct Hogeは、sampleクラスのインナークラスとして定義すればよいことは
分かりますが、困っていることが2つあります。


(1) コード生成テンプレートで、"InnerClass"はどのテンプレートに定義されているのでしょうか?
 C言語のコード生成テンプレートの、"Class Body"には以下の記述があります。
 $pubFeatures2 = %list="InnerClass" @separator="\n\n" classScope=="Public" or classScope=="Package"% + "\n\n"

 ここで、"InnerClass"とありますが、InnerClassが左ペインのテンプレート一覧にありません。
 どのテンプレートコードを追いかければよいのでしょうか?

 ※そもそも、テンプレートで"%ClassBody%"とあっても、左ペインには
 "Class Body"と名前が違っており(空白があり)、コードからどのテンプレートを
 追いかければよいのか、対応関係がいまいち分かりません。


(2)構造体を定義するとともに、typedef宣言したいのですが、
 標準機能でサポートされていますでしょうか?
 以下のように、struct Hogeを、HOGEと定義したいです。
  1: typedef struct Hoge
  2: {
  3: int x;
  4: } HOGE;
 左ペインのステレオタイプの上書きにある、structテンプレートを
 修正すればいけそうな感じがするのですが、typedef宣言をどうやって
 入れればよいか分かりません。

○回答

(1)InnerClassにつきましてはヘルプ「制御マクロ」に記載がありますように、
 Classなどのテンプレートが呼ばれます。

 また、テンプレートを呼ぶ際には、スペースなしで呼びます。
 このことは、ヘルプに追記いたします。

(2)typedef宣言につきましては、ヘルプ「Cの追加情報」にありますように、
 タグ付き値に「typedef」を設定してください。値は「true」と記述してください。

 また、HOGEの部分ですが、ヘルプ「C++の追加情報」にあるtypeSynonymsが
 C言語でも利用できることが分かりました。
 タグ付き値に「typeSynonyms」を設定してください。
 値は「HOGE」と記述してください。

 この内容もヘルプに追記いたします。

○ご報告

回答の方法でご希望の動作になったとのご報告をいただきました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ