如何在类函数中将数组指定为另一个数组

时间:2016-03-06 02:58:27

标签: c++ arrays function class

这基本上就是我想做的事情:

class Player
{
public:
    void setInventory(string inventory[]) { this->inventory = inventory; }
private:
    string inventory[4];
};

通常我会使用strncpy();,但遗憾的是使用参数inventory[],因为源不是const char *,因此源不起作用。如果可能的话,我希望将它作为一个类功能保留在一行或两行中。我只是想知道是否有一个简短的方法来做这个,而不是在类之外创建一个函数。感谢

3 个答案:

答案 0 :(得分:2)

如果您需要数组元素的副本,则std::copystd::move如果您允许从中移出数组元素。

示例:

class Player
{
public:
    void setInventory(std::string inventory[]) {
        std::copy(inventory, inventory + 4, this->inventory);
    }
private:
    std::string inventory[4];
};

请注意,您应确保“数组参数”(实际上是指针)应该(至少)所需的4个元素。如果可能,最好将大小编码为类型,例如使用std::array

struct Player {
  void setInventory(std::array<std::string, 4> i) {
    inventory = i;
  }
  std::array<std::string, 4> inventory;
};

这是有效的,因为std::array实现了赋值运算符operator=

答案 1 :(得分:0)

您不会使用stdncpy()inventorystd::string的数组,而不是char

您可以编写一个简单的循环来执行此操作,

void setInventory(string inventory[]) {
    for (int i = 0; i < 4; i++) 
        this->inventory[i] = inventory[i];
}

但最简单的方法是使用std::array

class Player
{
public:
    void setInventory(const std::array<std::string, 4>& inventory) { this->inventory = inventory; }
private:
    std::array<std::string, 4> inventory;
};

答案 2 :(得分:0)

您应该将您的库存存储设置为一个类型或类本身,以便您可以统一清晰地处理它。这将自动让你复制/移动操作(假设最近符合标准的编译器)以保持处理清晰:

typedef std::array<std::string, 4> Inventory;

class Player
{
public:
    void setInventory(Inventory &&inventory) {
        this->inventory = inventory;
    }
private:
    Inventory inventory;
};

这样做也可以让你扩展&amp;通过对从外部处理它的代码进行零重构或最小重构来增强Inventory本身。