【问题标题】:Is there a way to test that a default constructor does not exist?有没有办法测试默认构造函数不存在?
【发布时间】:2023-03-12 22:29:02
【问题描述】:

我正在为一种类型编写测试驱动程序,该类型被明确认为不是默认可构造的。有没有办法在我的测试驱动程序中断言是这种情况?我可以通过编译错误手动验证,但我想要一些东西来防止将来可能会错误地添加默认构造函数的更改。

编辑:我被困在 C++03 的环境中。牢记这一点,除了is_default_constructable,还有其他选择吗?

【问题讨论】:

  • 我不明白。为什么通过编译错误进行验证不能保护您免受未来更改的影响?
  • @ChristianHackl:很难自动化测试,并检查编译是否因正确原因而失败。
  • 我的意思是,我可以通过尝试使用默认构造函数来验证不存在的构造函数来导致错误。我显然不能在代码中留下那个错误。
  • @ChristianHackl:他的意思是他只能手动测试它,所以测试不会在他的自动化回归测试套件中,而且很容易忘记重新运行未来版本的手动测试。
  • @LightnessRacesinOrbit:嗯,他可以在他的测试和测试编译器调用中添加一个元步骤。但正如 Mike Seymour 上面所说,这将证明是非常复杂的。

标签: c++ testing c++03


【解决方案1】:

您可以使用static_assert(!std::is_default_constructible<T>::value, "Boo");。确保#include <type_traits>

【讨论】:

  • 让我真希望我能够访问 C++11 :(。有没有办法在 C++03 中做到这一点?
  • @GBleaney:嗯,也许有某种 SFINAE 技巧,带有默认参数可能会起作用。让我试试。
  • @GBleaney:试试this question
猜你喜欢
  • 2023-03-20
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多