cQueryという C/C++言語の構文解析木をjQuery風にアクセスするライブラリがあったら
ツールを作るときに楽になるかもしれない? 既に存在するのかもしれない?
例 user.hにある構造体に対して「yaml形式の文字列を作成する関数」を作成してみる。
コードイメージ.(ruby)
cQuery('user.h').structs.each do | struct_obj | puts struct_obj.generate_yaml end
user.h
struct User { CString name; CString email; Date birthday; };
出力例
UserYaml.h
CString User::toYaml() const;
UserYaml.cpp
CString User::toYaml() const { CString temp; CString yaml; yaml += "{"; temp.Format("%s: %s,", "name", this->name); yaml += temp; temp.Format("%s: %s,", "email", this->email); yaml += temp; temp.Format("%s: %s", "birthday", CQueryHelper::dateToYaml(this->birthday)); yaml += temp; yaml += "}¥n"; return yaml; }
cQueryHelper.h
文字列への変換方法が不明なものは、テンプレート関数を用意する。
static CString CQueryHelper::dateToYaml(const Date& date);
cQueryHelper.cpp
static CString CQueryHelper::dateToYaml(const Date& date) { return ""; }
問題点
- ヘッダの依存関係の解決方法
- 文字列の扱い(この例ではMFCのCStringを想定とした)
- ポインタや参照、配列の扱い
- テンプレートの扱い
C++は言語仕様が複雑だから、実際に作ろうとすると色々問題がありそうだ。