初始化具有非默认构造函数的std::数组项的更好方法
Better way to initialise std::array item that has non-default constructor?
当前初始化basicEnemies数组时,我需要将audioManager传递给每个basicEnemy类的构造函数。然而,我有20个基本敌人,所以有没有更好的方法来初始化MainGameScene中的每个基本敌人,而不必像我现在这样重复audioManager传递给构造函数?需要调用每个basicEnemy的构造函数。
MainGameScene.h
MainGameScene(AudioManager *audioManager)
std::array<BasicEnemy, 20> basicEnemies;
MainGameScene.cpp
MainGameScene::MainGameScene(AudioManager *audioManager) : basicEnemies{audioManager, audioManager, audioManager, audioManager...}
{
}
BasicEnemy.h
BasicEnemy(AudioManager *audioManager)
如果问MainGameScene构造函数调用后的":"部分是什么并不过分,或者它被称为什么,这样我下次可以更准确地问?
如果您坚持使用std::array<BasicEnemy>
数据成员,您可以使用额外级别的间接和std::index_sequence
:
class MainGameScene {
private:
static constexpr std::size_t n_enemies = 20;
std::array<BasicEnemy, n_enemies> basicEnemies;
template<std::size_t... is>
MainGameScene(AudioManager* audioManager, std::index_sequence<is...>) :
basicEnemies{(is, audioManager)...}
{}
public:
MainGameScene(AudioManager* audioManager) :
MainGameScene(audioManager, std::make_index_sequence<n_enemies>{})
{}
};
如果您可以放宽对数据成员类型以及std::shared_ptr
(在堆上分配(的要求,那么另一个选项是std::optional
(在自身内部存储对象(:
class MainGameScene {
private:
std::array<std::optional<BasicEnemy>, 20> basicEnemies;
public:
MainGameScene(AudioManager* audioManager) {
std::fill(basicEnemies.begin(), basicEnemies.end(), audioManager);
}
};
您可以生成它们:
MainGameScene::MainGameScene(AudioManager *audioManager)
{
std::generate(basicEnemies.begin(), basicEnemies.end(), [&audioManager]() {
return BasicEnemy(audioManager);
}
}
为参数添加一个默认值,该值调用全局工厂函数:
BasicEnemy(AudioManager *audioManager = getAudioManager() )
相关文章:
- 初始化具有非默认构造函数的std::数组项的更好方法
- 寻找一种更好的方法来表示无符号字符数组
- 如何更好地表示 6 个整数键而不是作为 6 维数组的索引?
- 对于下面给出的任务,使用类或多维数组更好吗
- 在 c++ 中从参数复制本地数组比从数组更快?
- 在初始化列表中初始化数组的更好方法
- 如果元素的数量已经知道,检查数组或向量中的所有元素是否相等更好?
- 试图为命名数组元素创建一个更好的循环
- 删除数组成员的更好方法是什么?
- 高性能程序,什么是更好的矢量数组或矢量的矢量
- 当数据比C 中的数组更多时显示如何显示
- 使用开关或定义函数数组 - 更快
- 在C 中,这是用字符串文字初始化char数组的好习惯
- 使用指向成员的指针数组还是使用开关更好
- 在C++中使用指向数组中对象的指针更好吗
- 使动态数组更大
- 这是在 C 或 C++ 中生成随机字节数组的好方法吗?
- std::vector如何比普通数组更快
- 大结构的长数组:更喜欢堆还是堆栈分配
- 访问三个静态数组比访问一个包含3倍数据的静态数组更快