チリペヂィア

リンクフリー。サンプルコードなどは関連記事内でライセンスについて明示されない限り商用利用なども自由に行って構いませんが、自己責任でお願いします。またこれら日記内容の著作権自体は放棄していません。引用部分については引用元の権利に従ってください。

doxygenのバグ?

C++/CLIで記述してる時にグローバル名前空間の型でプロパティ定義するとなんかおかしくなるっぽいです。(@doxygen1.8.4/windows)

//! @brief グローバル名前空間でtypedef
typedef int INTEGER;

//! @brief CLIでクラス記述
public ref class Sample {
public:
	//! @brief メンバー定義。これは大丈夫っぽいのだけど…
	::INTEGER Member;
	//! @brief プロパティ定義。これはアカンくなる
	property ::INTEGER Hoge {
		::INTEGER get() { return 0; }
	}
};

アカンの出方は、確認した中では

  1. そもそもそのプロパティが出力されなくなる
  2. property::INTEGERというproperty名前空間のINTEGER型と読んで、get/setを無視して変数(フィールド)の方にグループ分けされる

がありました。

なんか見つけた回避策

property /*!*/::INTEGER Hoge {
	::INTEGER get() { return 0; }
}

上述の2のタイプの現象からして、::が先頭に来るとproperty予約語と名前の区切りがうまくいかないんでは?と思い、::の前に/*!*/を適当に入れたら、どうも本当に効果があるようです…。

なお、そもそもpropertyさえなければ良いようで、例えば以下のC++クラスだとどれもちゃんと出力されました。

class Sample2 {
public:
	::INTEGER Member;
	const ::INTEGER Member2;
	virtual ::INTEGER Sub() { return 0; }
	virtual const ::INTEGER Sub2() { return 0; }
};

誰かバグレポあげてくだしい(爆)