有時,人們必須稍微繞行才能找到自己的位置。
首先,寫一個靜態專用功能:
std::pair<std::vector<SomeType *>, OtherType> Game::parse_config_file(char *configuration_file)
{
// ...
}
這將是一個私有靜態功能配置文件解析成這樣的數據。現在
,你們可以一起把這個拼圖:
class Game_config {
protected:
vector<SomeType*> vec;
OtherType obj;
Game_config(const std::pair<std::vector<SomeType *>, OtherType> &);
};
class Game : private Game_config {
static std::pair<std::vector<SomeType *>, OtherType> Game::parse_config_file(char *configuration_file);
public:
Game(char* configuration_file) : Game_config(parse_config_file())
{
}
};
Game_config
的構造應該是顯而易見的。
上面的一個小小的變化是讓parse_config_file()
返回Game_config
超類,並且有Game
的構造函數copy-construct構造它的超類。在這個用例中,現代編譯器應該能夠使用RVO。
爲什麼不直接複製構造obj = OtherType(parsedData);在構造函數體中。如果你使默認的構造函數是私有的,它不會編譯 –
從我的理解,這將導致對obj默認構造函數的調用,因爲所有遊戲數據成員必須在進入正文前初始化,我想保存該調用。 –
是的,在進入body構造函數之前,所有對象的默認構造函數都會被調用。 john zwick解決方案很好 –