c++ 如果一个文件在编译时不存在,我可以使用static_assert吗?

9nvpjoqh  于 2023-05-02  发布在  其他
关注(0)|答案(1)|浏览(110)

我想确保我传递给gui的资源图像文件在编译时确实存在。比如

load_image(static_assert(!(std::filesystem::exists(pathToFile)), "Resource file " + std::string(pathToFile) + " does not exist"));

这似乎需要std::filesystem::path为constexpr。这是可能的,还是只能通过构建工具来实现?
这样做的目的是在编译时捕获简单的错误,然后再离开我们的办公桌并通过QA过程。
一些人指出,这些文件可能在分发后在用户系统上移动了。这是不正确的,也是不得要领的。是个街机游戏。我们就能完全控制整个系统程序和资源被烘焙到OS中,并且用户不能访问文件来移动任何东西。它忽略了这一点,认为我依赖于此来防止运行时错误。我没有。我试图尽早防止一种类型的错误。这并不是我们试图防止错误的唯一方法。

jexiocij

jexiocij1#

尽管注解中提到的警告和注意事项,如果我真的需要使用编译器检查文件的存在,我会滥用预处理器并尝试以下内容:

#if __has_include("path/to/resource/file")
#error "Resource file not found"
#endif

再说一次,我不确定这是个好主意,但我认为它会起作用。

编辑

正如@user17732522在评论中指出的那样,__has_include是C++17的一部分。

相关问题