C++ 编译时未实现检查
C++ compile-time un-implemented check
我们有几个 C++ 函数将在我们项目的第 2 阶段实现,它们是 public 接口或它们各自的 classes 和模块的一部分。因为它们是 public 接口的一部分,我们认为它们应该存在,至少在头文件中,在第 1 阶段,以便我们在实现 classes 的其余部分时仍在考虑它们.但是,由于它们尚未实现,我们不希望有人调用它们。我们希望在编译时进行此检查,以确保正确性。
我的愿望是:
编译时间(可能是错误或警告;警告更好,因为它们更灵活——我们可以有选择地关闭它们)
适用于 G++4.8.1,不会终止 Visual Studio 2013 下的构建(我们仅将 Visual Studio/VisualAssistX 用作编辑器,但重构工具不会没有建筑就工作)
不难理解所做的事情和原因
函数存在于 class 文档中(我们可以包含一些 \warning not implemented in phase 1
符号供 doxygen 使用)
我正在考虑三个选项:
marking them as deprecated 的腰带和吊带方法(将生成警告)并抛出自定义异常 - 这几乎是我想要的,除了编译器警告它是 "deprecated" 与实际情况相反:已弃用的方法现在有效,但以后将无效;此方法稍后会起作用,但现在不起作用
另一个答案告诉 how to forbid using a function while still having it exist - 这很好,但不可读且难以搜索。另外,这是一个编译时错误——如果我们改变主意,我们不能让一些函数调用它——它是全有或全无。将每个未实现的函数都作为模板让我想知道这个技巧是否总能奏效。例如,虚函数不能是模板。
只是将它们作为评论放入 - 防止人们调用它们,但它们也不会出现在自动生成的文档中(我们以后无法决定是否进行选择性调用)
有没有更好的方法?如果不是,是否有理由更喜欢模板或评论选项而不是已弃用的选项?
替代方案:
你可以只声明它们而不定义,所以你会得到 link 错误。
然后,您可以提供一个定义为空的库 not_yet_implemented
,以允许过早使用这些函数。
或
将您的方法标记为已删除:= delete
,最终将其包装在宏中
#define NOT_YET_IMPLEMENTED = delete
我们有几个 C++ 函数将在我们项目的第 2 阶段实现,它们是 public 接口或它们各自的 classes 和模块的一部分。因为它们是 public 接口的一部分,我们认为它们应该存在,至少在头文件中,在第 1 阶段,以便我们在实现 classes 的其余部分时仍在考虑它们.但是,由于它们尚未实现,我们不希望有人调用它们。我们希望在编译时进行此检查,以确保正确性。
我的愿望是:
编译时间(可能是错误或警告;警告更好,因为它们更灵活——我们可以有选择地关闭它们)
适用于 G++4.8.1,不会终止 Visual Studio 2013 下的构建(我们仅将 Visual Studio/VisualAssistX 用作编辑器,但重构工具不会没有建筑就工作)
不难理解所做的事情和原因
函数存在于 class 文档中(我们可以包含一些
\warning not implemented in phase 1
符号供 doxygen 使用)
我正在考虑三个选项:
marking them as deprecated 的腰带和吊带方法(将生成警告)并抛出自定义异常 - 这几乎是我想要的,除了编译器警告它是 "deprecated" 与实际情况相反:已弃用的方法现在有效,但以后将无效;此方法稍后会起作用,但现在不起作用
另一个答案告诉 how to forbid using a function while still having it exist - 这很好,但不可读且难以搜索。另外,这是一个编译时错误——如果我们改变主意,我们不能让一些函数调用它——它是全有或全无。将每个未实现的函数都作为模板让我想知道这个技巧是否总能奏效。例如,虚函数不能是模板。
只是将它们作为评论放入 - 防止人们调用它们,但它们也不会出现在自动生成的文档中(我们以后无法决定是否进行选择性调用)
有没有更好的方法?如果不是,是否有理由更喜欢模板或评论选项而不是已弃用的选项?
替代方案:
你可以只声明它们而不定义,所以你会得到 link 错误。
然后,您可以提供一个定义为空的库 not_yet_implemented
,以允许过早使用这些函数。
或
将您的方法标记为已删除:= delete
,最终将其包装在宏中
#define NOT_YET_IMPLEMENTED = delete