我希望对象有一个调用函数的方法(但是每个对象都应该有不同的函数来调用)。我将通过展示一个例子来向您展示我的意思:
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
答案 0 :(得分:5)
您可以使用std::function
。
#include <functional>
class Human
{
std::function<void()> mFunc;
public:
void setMyFunction(std::function<void()> func) { mFunc = func; }
void callMyFunction() { if (mFunc) mFunc(); }
};
答案 1 :(得分:4)
我建议使用一个简单的函数指针。就这样做:
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);
}
无法编译。