3

仮想メソッドがすべてのサブクラスの特定のプロパティを満たすことをアサートするテスト ケースを生成したいと考えています。これを自動化するにはどうすればよいですか?

class A {
 virtual int foo() = 0;
};

class B : public A {
 virtual int foo() override;
};

class C : public A {
 virtual int foo() override;
};

私は何かをしたいです(私は以下の構文がゴミであることを知っています)

for (A : SUBCLASSES_OF(A))
{
  A a;
  assert(a.foo() == 42);
}

ブースト/テン​​プレート メタプログラミング/マクロ マジックでもそれは可能ですか、それともここでの推論に大きな誤りがありますか?

4

4 に答える 4

2

それは不可能です。必要なコードをコンパイルするときに、特定のベースを拡張するクラスのセットはおそらく不明であると考えてください。特に、翻訳単位がコンパイルされた後、あなたや他の開発者が新しいクラスを追加することを妨げるものは何もないため、翻訳の「コンパイル時間」とプロジェクト全体の「コンパイル時間」は異なる時間になります。

より良い質問は、あなたが本当に解決したいことは何ですか?

于 2013-02-22T16:00:40.157 に答える
0

http://www.gccxml.org/HTML/Running.htmlは役に立ちますか?同僚が何年も前にコードを生成するためにそれを使用していたことを私は知っています。

また、DoxygenからのXml出力を活用する人々も知っています。

于 2013-02-22T17:22:05.717 に答える
0

実行可能な解決策は、ディレクトリをスキャンし、テスト ケースを含む C++ ソース コードを生成するスクリプトを (たとえば Python で) 作成することだと思います。C++自体でそれを行う方法はないと思います(特定のコンパイラ/プラットフォームによって提供される可能性のある非標準の拡張機能を使用せずに)。

于 2013-02-22T16:04:12.093 に答える