我有一个对象,它有一个指向函数的指针数组作为配置值,像这样。
class Object{
public:
bool (*function[2])() = {};
};
bool fooFunc(){return true;}
bool barFunc(){return false;}
Object obj;
void setupObject(){
obj.function[0] = &fooFunc;
obj.function[1] = &barFunc;
}
我在μC上想把用过的函数存储在EEPROM里 这样当程序重新启动时,对象就可以用同样的配置恢复了。有没有办法在写函数时指定函数写入的地址?
另外,我也可以把所有允许使用的函数(几十个)做成指针数组,只保存函数ID,但我不知道如何有效地做到这一点,而且代码可维护。在这里使用lambda函数是否可以为我节省一些空间?另外,这意味着我的函数总是被加载,不是吗?
有没有办法在写函数时指定函数写入的地址?
没有,在标准的C++中没有。
选择地址是链接器的事情。如何配置链接器将函数存储在手动选择的地址中,我不知道;这可能取决于你使用的链接器。
我可以把所有允许使用的函数做成一个指针数组......。在这里使用lambda函数会不会
每一个lambda都有一个不同的类型,一个数组的所有元素都有相同的类型。你不能拥有一个lambdas数组。