繁体   English   中英

如何迭代C ++类的所有子类(在编译时)?

[英]How can I iterate over all subclasses of a C++ class (at compile time)?

我想生成一个测试用例,断言虚拟方法满足所有子类的某些属性。 我该如何自动化?

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);
}

甚至可以使用boost / template元编程/宏魔法,或者我在推理中犯了很大的错误?

那个游客怎么样? 参见Vistor设计模式 此答案也很有用, 访客模式如何避免向下转换

这是不可能的。 当您编译所需的代码时,请考虑扩展给定库的类集可能是未知的。 特别是,在编译翻译单元后,没有什么能阻止您或任何其他开发人员添加新类,现在您的翻译的“编译时间”和整个项目的“编译时间”将是不同的时间。

更好的问题是你真正想要解决的什么?

我认为可行的解决方案可能是编写一个脚本(例如在python中),它扫描你的目录并为你生成带有测试用例的C ++源代码。 我认为在c ++本身没有办法做到这一点(不使用特定编译器/平台可能提供的非标准扩展)。

http://www.gccxml.org/HTML/Running.html会有帮助吗? 我知道一位同事多年前使用它来生成代码。

我也认识人们利用Doxygen的Xml输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM