C++の(非常に多くの)残念な設計上の脆弱性の1つは、テンプレートメタプログラミングを使用すると実装からインタフェースを分離することは基本的に不可能です。これが読めない場合は、私はあなたを責めないでテンプレートの実装の詳細をDoxygenから隠す
template <typename Ma, typename Mb>
typename boost::enable_if_c<
detail::IsMatrix<Ma>::val and detail::IsMatrix<Mb>::val and
detail::MatrixDimensionCheck<Ma,Mb>::isStaticMatch,
bool>::type
operator==(const Ma &a, const Mb &b) {
return detail::matrixEqual(a,b);
}
:
はすべての私のライブラリーの上に私のようなものを持っています。この混乱の大部分は、引数が行列であり次元が一致する場合は戻り値の型をbool
と定義するだけで、他のものであれば未定義になります(したがって、この演算子が他の重要なものを隠さないようにSFINAEに依存します)。
本質的に静的型チェックであるファンクションは、通常のC++関数のシグネチャに埋め込まれているので、これらの実装ガットは生成されたドキュメントに表示されます。
私はユーザーにこれを読んでもらう必要はありません。彼らが知る必要があるのは、この関数がbool
を返すことです(これは上記を読んでほとんど分かりません)。ドキュメントでは、このオペレータが行列のみを受け入れることを簡潔に英語で簡単に説明することができます。
Doxygenにそのタイプの混乱をbool
とするよう説得する方法はありますか? (私は、コード内でこれをきれいにする方法は多かれ少なかれあると仮定していますが、何かを考えることができれば、アイデアは大歓迎です)。
私は「自動的に生成された」ドキュメントオーバー手書きの文書を好む理由があります。私はほとんどの場合、ドキュメントシステムをセットアップする/それを受け入れられるように修正するのにもっと多くの時間を費やしていますが、その間にすべてのドキュメンテーションを実際の素敵なフォーマットで書いたことがあります。 – orlp
@ nightcracker:もちろん、ドキュメントを更新することなく、パラメータや関数などを変更するまでは。それから、それは同期しなくなり、役に立たないより悪くなります。また、Doxygenは手書きの文書をうまくサポートしています。 –
おそらく関連している[this](http://stackoverflow.com/questions/3435225/c-meta-programming-doxygen-documentation)の質問です。 – elemakil