首页 > 解决方案 > 没有定义的 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++templateslinkerresourcescompile-time-type-checking

解决方案


一种愚蠢的C方法:您可以拼命__COUNTER__用作构造函数的参数。这个动态宏在每次出现后都会增加,从 0 开始。

我希望有更好的解决方案。


推荐阅读