如何使用数组传递多个字符串文字(无向量)

时间:2014-11-02 22:05:24

标签: c++ arrays pointers char const

目前我有这个课程:

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个项目;这不会很好)。 我如何使用数组重写这个?

注意:我正在为一个非常低端的设备编写代码,因此矢量不是一个选项。

感谢任何帮助。

2 个答案:

答案 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); 
}