有没有一种方法可以测试默认构造函数不存在?

6
我正在为一个明确不应该默认构造的类型编写测试驱动程序。有没有办法在我的测试驱动程序中断言这一点?我可以通过编译错误手动验证,但我希望有些东西可以防止将来可能误导地添加默认构造函数。
编辑:我被困在一个只支持C++03的环境中。请注意,除了is_default_constructable之外还有其他选项吗?

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

11

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


让我真的希望我能够使用C++11 :(. 有没有办法在C++03中实现这个? - GBleaney
@GBleaney:嗯,也许可以使用默认参数的SFINAE技巧来解决问题。让我试试看。 - Kerrek SB
@GBleaney:尝试一下这个问题 - Kerrek SB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接