我需要在 C++ 项目中选择随机函数
I need to choose random function in C++ project
我正在制作一个 C++ 游戏项目,在游戏中我需要选择随机奖励(函数)。
(下面是代码示例)
void triple_balls(){
/* CODE */
}
void longer_paddle(){
/* CODE */
}
void shorter_paddle(){
/* CODE */
}
void bonus_activator(){
//Here I must choose one of the 3 functions above
//FIXME
}
改用函数指针数组
using BonusFunc = void (*)();
BonusFunc[3] = { triple_balls, longer_paddle, shorter_paddle };
void bonus_activator(){
BonusFunc[rand() % 3](); // just an example, don't use rand() in real code
}
您可以使用 std::function
,将函数存储在容器中。
然后创建一个 std::function
大小的数组 3
.
#include <functional>
#include <iostream>
void triple_balls() { /* YOUR CODE */ }
void longer_paddle() { /* YOUR CODE */ }
void shorter_paddle() { /* YOUR CODE */ }
void bonus_activator(){
std::function<void(void)> farr[3] =
{
triple_balls,
longer_paddle,
shorter_paddle
};
farr[rand() % 3]();
}
std::array{
&triple_balls,
&longer_paddle,
&shorter_paddle,
}
.at(rand() % 3)();
仅适用于 one-line,不需要变量,优化器可能会将其减少为 switch-statement-like 操作:
std::array{ &triple_balls, &longer_paddle, &shorter_paddle }.at(rand() % 3)();
我正在制作一个 C++ 游戏项目,在游戏中我需要选择随机奖励(函数)。
(下面是代码示例)
void triple_balls(){
/* CODE */
}
void longer_paddle(){
/* CODE */
}
void shorter_paddle(){
/* CODE */
}
void bonus_activator(){
//Here I must choose one of the 3 functions above
//FIXME
}
改用函数指针数组
using BonusFunc = void (*)();
BonusFunc[3] = { triple_balls, longer_paddle, shorter_paddle };
void bonus_activator(){
BonusFunc[rand() % 3](); // just an example, don't use rand() in real code
}
您可以使用 std::function
,将函数存储在容器中。
然后创建一个 std::function
大小的数组 3
.
#include <functional>
#include <iostream>
void triple_balls() { /* YOUR CODE */ }
void longer_paddle() { /* YOUR CODE */ }
void shorter_paddle() { /* YOUR CODE */ }
void bonus_activator(){
std::function<void(void)> farr[3] =
{
triple_balls,
longer_paddle,
shorter_paddle
};
farr[rand() % 3]();
}
std::array{
&triple_balls,
&longer_paddle,
&shorter_paddle,
}
.at(rand() % 3)();
仅适用于 one-line,不需要变量,优化器可能会将其减少为 switch-statement-like 操作:
std::array{ &triple_balls, &longer_paddle, &shorter_paddle }.at(rand() % 3)();