Java と C# を見ると、特別な言語ベースの注釈に基づいて、いくつかの邪悪な処理を行うことができます (名前が間違っている場合はご容赦ください)。
C++ では、これに関して 2 つの問題があります。
1) 実行時にアクセス可能な型情報でクラスに注釈を付ける方法はありません。
2) ソースを解析して何かを生成するのは複雑です。
しかし、アノテーションと同じ基本的な効果を実現するために、テンプレートのメタプログラミングを使用してこれを行うことができると考えていました (まだ考えているところです)。さまざまなタイプに特化した char_traits と同様に、xml_traits テンプレートを宣言的な方法で使用できます。この特性クラスを使用して、シリアライズしようとしているクラスの特性を特殊化することにより、クラスをシリアライズ/デシリアライズする方法を定義できます。
考えの例:
template<typename T>
struct XML_traits
{
typedef XML_Empty Children;
};
template<>
struct XML_traits<Car>
{
typedef boost::mpl::vector<Body,Wheels,Engine> Children;
};
template<typename T>
std::ostream& Serialize(T const&)
{
// my template foo is not that strong.
// but somthing like this.
boost::mpl::for_each<typename XML_Traits<T>::Children,Serialize>(data);
}
template<>
std::ostream& Serialize<XML_Empty>(T const&)
{ /* Do Nothing */ }
私の質問は:
Java や C# などの言語で使用される注釈の概念をエミュレートするために、このような手法 (テンプレート メタプログラミング) を使用するプロジェクト/デキュメンテーション (XML だけでなく) を見た人はいますか?宣言的なスタイルを使用してタスクを実行します)。
私の研究のこの時点で、私はより多くの読み物と例を探しています。