目前我有这个课程:
class Menu
{
void setVars(const char*,const char*, const char*);
const char *item1;
const char *item2;
const char *item3;
Menu(const char *setItem1, const char *setItem2, const char *setItem3)
{
setVars(setItem1, setItem2, setItem3);
}
}
void Menu::setVars(const char *setItem1, const char *setItem2, const char *setItem3)
{
item1 = setItem1;
item2 = setItem2;
item3 = setItem3;
}
正如你所看到的,目前这是凌乱,低效和不可扩展的(假设我想要20个项目;这不会很好)。 我如何使用数组重写这个?
注意:我正在为一个非常低端的设备编写代码,因此矢量不是一个选项。
感谢任何帮助。
答案 0 :(得分:1)
你似乎在寻找这样的东西:
class Menu
{
int nb_items;
char **item;
public:
Menu(size_t nb_items) : nb_items(nb_items) {
item = new char*[nb_items];
}
~Menu() {
delete [] item;
}
void setVars(size_t n, char*s) {
item[n]=s; // asuming it's a unique adress of the string that remains valid
}
};
您也可以添加以下运算符,以便能够直接访问/替换菜单项:
char*& operator[] (size_t n) {
return item[n];
}
答案 1 :(得分:1)
您可能想要使用variadic functions。
我也喜欢这个基于模板的变体:
#include <iostream>
class Menu {
public:
template<int N>
Menu(const char * (& args)[N]) {
for(int i = 0;i<N;i++)
std::cerr << args[i] << std::endl;
}
};
int main()
{
static const char * a[] = {"A","B","C","D"};
Menu m(a);
}