我想从Command类创建一个变量,该类将接收一个函数及其参数,并在调用Execute时执行该变量,但是我不知道如何将构造函数的参数传递给类成员变量,因为我可以告诉功能指针将如何。
这是我所想到的一些伪代码。
class Command {
public:
template<_Fn, _Args...>
Command(_Fn&& _function, _Args&&... _args)
{
}
void Execute(){
}
};
void Print(int _int, float _float){
...
}
void Print(const char* _text, unsigned int _uint){
...
}
int main(){
Command cmd0 = Command(&Print, 5, 6.2f);
Command cmd1 = Command(&Print, "Hello", 2u);
cmd1.Execute();
cmd0.Execute();
}
答案 0 :(得分:4)
无需重新设计,只需使用std::function
和std::bind
:
int main(){
std::function<void()> cmd0 = std::bind(&PrintIntFloat, 5, 6.2f);
std::function<void()> cmd1 = std::bind(&PrintStringInt, "Hello", 2u);
cmd1();
cmd0();
}
请注意,我重命名了函数是因为lifting overload sets在C ++中是有问题的。
或者您可以在不需要提升的情况下使用lambda(感谢deW1的建议):
std::function<void()> cmd0 = [] { Print(5, 6.2f); };
std::function<void()> cmd1 = [] { Print("Hello", 2u); };