2016-03-06 60 views
1

中的另一個數組這基本上就是我想要做的事:如何分配數組作爲一類功能

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

通常我會用strncpy();但可悲的是使用參數inventory[]的來源,因爲不工作它不是const char *。如果可能的話,我希望將它作爲一個類函數保存在一行或兩行中。我只想知道是否有一個簡短的方法來做這個,而不是在類之外創建一個函數。謝謝

+0

我推薦你學習['std :: array'](http://en.cppreference.com/w/cpp/container/array)。或者關於['std :: copy'](http://en.cppreference.com/w/cpp/algorithm/copy)。 –

回答

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=

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; 
}; 
0

你應該真的把你的庫存存儲到一個類型或類本身,所以你可以統一和明確地對待它。這會自動讓你複製/移動操作(假設最近的符合標準的編譯器),以保持清晰的處理:

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

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

這樣做,這樣也可以讓你擴大&提高Inventory本身在未來與零或對從外部處理它的代碼進行最小程度的重構。