C ++编译时未实现的检查

时间:2015-04-01 15:13:28

标签: c++ interface g++

我们有几个C ++函数将在我们项目的第2阶段实现,它们是公共接口或其各自的类和模块的一部分。因为它们是公共接口的一部分,所以我们认为它们应该在第1阶段存在,至少在标题中,以便我们在实现其余类时仍然在考虑它们。但是,由于它们未实现,我们希望没有人可以调用它们。我们希望在编译时进行此检查,以确保正确性。

我的愿望是:

  • 编译时间(可能是错误或警告;警告更好,因为它们更灵活 - 我们可以选择性地关闭它们)

  • 适用于G ++ 4.8.1并且不会在Visual Studio 2013下终止构建(我们仅将Visual Studio / VisualAssistX用作编辑器,但重构工具在没有构建的情况下无法工作)

  • 不太难理解做了什么以及为什么

  • 类文档中存在函数(我们可以包含一些用于获取doxygen的\warning not implemented in phase 1符号)

我正在考虑三种选择:

  • marking them as deprecated的腰带和吊带方法(将生成警告)并抛出自定义异常 - 这几乎是我想要的,除了编译器警告它“弃用”与实际情况:已弃用的方法现在有效,但以后不起作用;此方法稍后会起作用,但现在不起作用

  • 另一个答案告诉how to forbid using a function while still having it exist - 这很好,但不可读,很难搜索。另外,这是一个编译时错误 - 如果我们改变主意,我们不能让某些函数调用它 - 它是全有或全无。并且使每个未实现的函数成为模板让我想知道这个技巧是否总是有效。例如,虚函数不能是模板。

  • 只是把它们作为评论 - 让人们不要打电话给他们,但他们也不会出现在自动生成的文档中(我们以后不能决定选择性呼叫)

有更好的方法吗?如果没有,是否有理由更喜欢模板或评论选项而不是弃用的选项?

1 个答案:

答案 0 :(得分:1)

作为替代方案:

您可以在没有定义的情况下声明它们,因此您会收到链接错误 然后,您可以提供具有空定义的库not_yet_implemented,以允许过早使用这些函数。

将您删除的方法标记为= delete,最后将其包装在宏

#define NOT_YET_IMPLEMENTED = delete