gpt4 book ai didi

C++ 编译时未实现检查

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:18:53 28 4
gpt4 key购买 nike

我们有几个 C++ 函数将在项目的第 2 阶段实现,它们是公共(public)接口(interface)或它们各自的类和模块的一部分。因为它们是公共(public)接口(interface)的一部分,所以我们认为它们应该存在,至少在头文件中,在第 1 阶段,以便我们在实现其余类时仍在考虑它们。但是,由于它们尚未实现,我们不希望有人调用它们。我们希望这种检查发生在编译时,以确保正确性。

我的愿望是:

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

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

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

  • 函数存在于类文档中(我们可以包含一些 \warning not implemented in phase 1 notation 以便 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++ 编译时未实现检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394513/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com