【发布时间】:2019-05-19 06:35:09
【问题描述】:
我正在构建一个简单的 2D 游戏引擎,并且有一个类能够充当游戏中的按钮。我正在尝试创建一个成员函数,以便用户可以为按钮对象提供一个在单击它时运行的函数,以及该函数的参数。以下是部分完成任务的代码示例:
class Entity{
public:
template <typename ... fnParams, typename ... fnArgs>
void Set_Click_Action(void(*action)(fnParams ... params), fnArgs ... args) {
action(args ...); //this works correctly. However, I do not
//want to call the function here, I want
//instead to store the function in the Entity
//object
}
void function(int i, double j, std::string k){
std::cout << i << '\n' << j << '\n' << k << '\n';
}
int main(){
Entity entity;
entity.Set_Click_Action(function, 12, 12.5, std::string("String"));
}
此代码可以正常工作,但没有实现我的目标。我想存储该功能以供以后使用(单击对象时)。是否可以将函数指针和将参数保存到成员变量中的可变参数包?如果是这样,这样做的策略是什么?我应该指出,我对在 C++ 中使用可变参数模板非常陌生。提前感谢您的帮助。
【问题讨论】:
-
制作一个 lambda 并将其存储为
std::function<void()>。或者,将Set_Click_Actionaccept 设为函数对象(然后不需要 fnArgs,因为用户可以传入绑定函数)。
标签: c++ function-pointers variadic-templates variadic-functions member-functions