c++ - 没有定义的 C++ 链接时间资源“分配”
问题描述
我目前正在为 ESP32 开发 C++ 类。我想实现资源的资源分配,例如:IO-Pins、可用的 RMT 通道等。我的想法是使用某种资源处理程序来执行此操作,该处理程序在编译时检查它,但我没有好主意,也没有找到任何关于这样的东西。
为了澄清我的问题,让我们举一个例子来说明我的意思。微控制器 X 具有 IO 引脚 1-5,每个引脚只能由一个组件使用。
组件彼此不知道任何东西,它们应该将引脚用作 ctor 参数。现在我想要一个类/方法/...来检查组件需要的引脚是否已经在编译时分配。
CompA a(5); //works well: 5 is not in use
CompB b(3); //same as before, without the next line it should compile
CompC c(5); //Pin 5 is already in use: does not compile!
我还不确定该怎么做。我最好的猜测(因为我不能在这里使用定义:用户应该只能通过提供参数或模板参数来使用它)是,它可能与模板函数一起使用,但我没有找到任何方法来检查哪个其他参数已传递给模板方法/类。
Edit1:程序的某些部分可能是自动生成的,也可能是用户以某种方式定义的,他们不知道其他引脚的使用情况。因此,分配是一个“安全”特性,应该禁止错误代码。如果寄存器函数位于不同的代码路径中(即使它们可能相互排斥),这也应该禁止它
Edit2:我收到了回复,这里的编译时间是错误的,因为组件可能会与另一个组件分开编译。所以这样做的唯一方法似乎是链接器错误。
解决方案
一种愚蠢的C
方法:您可以拼命__COUNTER__
用作构造函数的参数。这个动态宏在每次出现后都会增加,从 0 开始。
我希望有更好的解决方案。
推荐阅读
- javascript - 当 useEffect 依赖项发生变化时,React 组件不会重新渲染
- iteration - 如何在python中迭代字符串的所需部分
- python - 如何根据前 3 个字符匹配返回完整字符串?
- javascript - 使用 Bootstrap 禁用弹出内容中的按钮侦听器
- geocoding - 如何使用 GS API v7 执行精确的字符串匹配?
- c++ - C++ 函数的参数值集如何工作?
- python - VSCode 中的调试悬停未在 Python 中显示变量值
- r - 如何将三组的ggplot图创建为一个图?
- javascript - 如何与按钮元素在同一行渲染个性化的按钮组件
- tensorflow - TensorFlow Lite 模型能否在应用程序内部持续优化?(无代码问题)