[英]Can you pass a function so you can later call it?
我希望有一个方法调用一个函数(但每个对象应该有一个不同的函数来调用)。 我将通过展示一个例子来向您展示我的意思:
class Human
{
public:
void setMyFunction(void func); // specify which function to call
void callMyFunction(); // Call the specified function
};
void Human::setMyFunction(void func) // ''
{
myFunction = func;
}
void Human::callMyFunction() // ''
{
myFunction();
}
void someRandomFunction() // A random function
{
// Some random code
}
int main()
{
Human Lisa; // Create Object
Lisa.setMyFunction(); // Set the function for that object
Lisa.callMyFunction(); // Call the function specified earlier
}
这个代码(显然)不起作用,但我希望你理解我想要完成的事情。
MfG,TPRammus
您可以使用std::function
。
#include <functional>
class Human
{
std::function<void()> mFunc;
public:
void setMyFunction(std::function<void()> func) { mFunc = func; }
void callMyFunction() { if (mFunc) mFunc(); }
};
我建议使用一个简单的函数指针。 这样做:
class Human
{
public:
using func_t = void (*)();
void setMyFunction(func_t f) {
func = f;
}
void callMyFunction() {
func();
}
private:
func_t func;
};
人们可能更喜欢std::function
函数指针的原因是:
std::function
往往比通过指针调用函数更慢。 std::function
需要真正丑陋的语法。 例:
void foo();
void foo(int x = 0);
void check() {
Human h;
h.setMyFunction(&foo);
}
将无法编译。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.