如果文件在编译时不存在,我可以 static_assert 吗?

问题描述 投票:0回答:1

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

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

这似乎要求 std::filesystem::path 是 constexpr。这是可能的还是我只能通过构建工具来做到这一点?

这样做的目的是在编译时发现简单的错误,然后再离开我们的办公桌并通过 QA 流程。

许多人指出,这些文件可能在分发后已在用户系统上移动。这既不真实又没有抓住要点。这是一款街机游戏。我们可以完全控制整个系统。程序和资源被嵌入到操作系统中,用户无法访问文件来移动任何东西。假设我依靠它来防止运行时错误,它错过了重点。我不是。我试图尽早防止一种类型的错误。这并不是我们试图防止错误的唯一方法。

c++ constexpr std-filesystem c++23
1个回答
1
投票

评论中提到的警告和注意事项不成立,如果我真的需要使用编译器检查文件是否存在,我会滥用预处理器并尝试以下操作:

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

再一次,我不确定这是个好主意,但我认为它会奏效。

至少 clang 和 gcc 有

__has_include
指令。

© www.soinside.com 2019 - 2024. All rights reserved.