我们有几个C++函数将在我们项目的阶段2中实现,它们是公共接口或其各自的类和模块的一部分。因为它们是公共接口的一部分,所以我们认为它们应该存在于第一阶段的标题中,以便我们在实施其余类时仍然在考虑它们。但是,由于它们未实现,我们不希望任何人给它们打电话。我们希望此检查在编译时发生,以确保正确性。C++编译时未执行的检查
我的愿望是:
编译时间(可能是一个错误或警告;警告更好,因为它们更灵活 - 我们可以选择将它们关闭)
G上作品+ +4.8.1并且不会在Visual Studio 2013下终止构建(我们仅使用Visual Studio/VisualAssistX作为编辑器,但重构工具在没有构建的情况下无法运行)
不太难理解所做的事为什么
个功能存在类文档中(我们可以包括一些
\warning not implemented in phase 1
符号来doxygen的回暖)
我正在考虑三个选项:
的腰带和背带的做法marking them as deprecated(它会产生一个警告)并抛出一个自定义的异常 - 这几乎是我想要的,除了编译器警告它“被弃用”与真实情况相反:现在不推荐使用的方法,但不会以后;这种方法将工作后,但现在不工作
另一个答案告诉how to forbid using a function while still having it exist - 这是很好,但难以阅读,很难搜索。另外,这是一个编译时错误 - 如果我们改变主意,我们不能让一些函数调用它 - 它是全部或者全部。并且使每个未实现的函数都成为一个模板,这让我怀疑这个技巧是否会始终有效。例如,虚拟函数不能是模板。
只是把它们作为一个评论 - 从美其名曰保持人,但他们也不会自动生成的文档中出现(我们不能决定以后有选择性呼叫)
有没有更好的方法?如果不是,是否有理由更喜欢模板或评论选项而不是弃用选项?
['static_assert'](http://en.cppreference.com/w/cpp/language/static_assert)? – 2015-04-01 15:15:48
@JoachimPileborg(与模板)是什么在[禁止使用](http://stackoverflow.com/a/18814056/309334)答案我在上面提到。 [这个答案](http://stackoverflow.com/a/5246686/309334)说明了为什么模板是必要的。 – Eponymous 2015-04-01 15:20:31