gpt4 book ai didi

c++ - 使用函数指针推迟函数执行

转载 作者:行者123 更新时间:2023-11-27 22:35:19 25 4
gpt4 key购买 nike

我想从 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();
}

最佳答案

无需重新发明,只需使用 std::functionstd::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); };

关于c++ - 使用函数指针推迟函数执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55228399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com