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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++编译时未实现的检查相关的知识,希望对你有一定的参考价值。

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

我的愿望是:

  • 编译时间(可能是错误或警告;警告更好,因为它们更灵活 - 我们可以选择性地关闭它们)
  • 适用于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 - 这是好的,但不可读,很难搜索。另外,这是一个编译时错误 - 如果我们改变主意,我们不能让某些函数调用它 - 它是全有或全无。并且使每个未实现的函数成为模板让我想知道这个技巧是否总是有效。例如,虚函数不能是模板。
  • 只是把它们作为评论 - 让人们不要打电话给他们,但他们也没有出现在自动生成的文档中(我们以后不能决定选择性调用)

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

答案

作为替代:

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

要么

标记您删除的方法:= delete,最终将其包装在宏中

#define NOT_YET_IMPLEMENTED = delete

以上是关于C ++编译时未实现的检查的主要内容,如果未能解决你的问题,请参考以下文章

linux下用简单c语言代码怎么实现实现文件夹所有内容的复制

编译原理 实验一 java语言实现对C语言词法分析

编译原理 实验一 java语言实现对C语言词法分析

C1编译器的实现

golang项目中使用条件编译

编译具有相同标头的 C 和 C++ 文件时未定义的引用