这基本上就是我想做的事情:
class Player
{
public:
void setInventory(string inventory[]) { this->inventory = inventory; }
private:
string inventory[4];
};
通常我会使用strncpy();
,但遗憾的是使用参数inventory[]
,因为源不是const char *
,因此源不起作用。如果可能的话,我希望将它作为一个类功能保留在一行或两行中。我只是想知道是否有一个简短的方法来做这个,而不是在类之外创建一个函数。感谢
答案 0 :(得分:2)
如果您需要数组元素的副本,则std::copy
或std::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()
,inventory
是std::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
本身。