【发布时间】:2014-02-13 21:30:17
【问题描述】:
所以,在 javascript(coffeescript) 中,我有一些看起来像这样的代码:
"BRIGHT":
min: 1
max: 4
step: 1
value: 3
bluetooth:
options: [ 'off', 'on' ] # SOMETIMES I NEED ARRAY
callback: ->
rangeFinder.bluetooth = rangeFinder.getSetting().value
mode:
options: [ 'basic', 'advanced', 'config' ] # OF DIFFERENT LENGTHS
callback: ->
rangeFinder.lastMode = rangeFinder.getSetting().value
我如何在 c++ 中做这样的事情?
我有一个由 3 个类似于亮度的对象组成的数组
#include "setting.cpp"
class GlobalMenu {
public:
MenuSetting settings[3];
int setting;
GlobalMenu();
};
GlobalMenu::GlobalMenu(void){
// What is the currently selected setting?
this -> setting = 0;
this -> settings[0].name = "BRIGHT";
this -> settings[0].min = 1;
this -> settings[0].max = 4;
this -> settings[0].step = 1;
this -> settings[0].value = 3;
this -> settings[1].name = "BLUETOOTH";
// HOW DO I GET VARIABLE LENGTH ARRAYS HERE?
}
在 setting.cpp
中class MenuSetting {
public:
char *name;
int min;
char options[][5];
int max;
int step;
int value;
};
在其他地方,此代码更改了设置(并且有效)
void RangeFinder::changeSetting(int dir) {
this -> data.global.settings[this -> data.global.setting].value +=
(dir ? 1 : -1) *
this -> data.global.settings[this -> data.global.setting].step;
this -> enforceMinMax();
this -> render();
}
如果你能找到一种方法来清理它会有所帮助
所以,我大概可以弄清楚如何检测选项是否有长度,但是我在将任意数量的选项分配到选项数组时遇到了问题
解决方案不能使用 STD。
据我所知,atmega32 微控制器不能使用标准库。
【问题讨论】:
-
这个问题用 C 和 C++ 双重标记;现在它已被修改,因此它仅标记为 C,基于 cmets 中对Zac Howland 的answer 的讨论。问题中的代码显然应该是 C++ (
class GlobalMenu),这使得 C 标记看起来很奇怪。事情很混乱! -
在我的任何编辑中都没有用 c 标记。它的 C++。