我想传递一个没有参数的void函数或一个带有构造函数参数的void函数作为参数。像这样:
DailyActivity activity1(&function1)
或
DailyActivity activity2(&function2(uint_t 1))
调用DailyActivity::run()
时,应触发传递的函数。
DailyActivity
的标题如下所示:
class DailyActivity {
typedef void (*function_type)();
public:
DailyActivity(void (*f)());
virtual void run();
private:
function_type m_function;
};
构造函数和run()函数如下所示:
DailyActivity::DailyActivity(void (*f)()) : m_function((*f)) {
}
DailyActivity::run() {
m_function();
}
但是我没有设法(1)以正确的方式定义typedef,使得能够接受两个不同的函数,以及(2)成功地传递参数o function2。
答案 0 :(得分:2)
你做不到。不幸的是,C ++无法处理部分函数,所以你必须重载你的构造函数,将函数和参数作为两个单独的参数,第二个是处理无参数的参数。然后你将有两个函数指针,其中一个应为null。
另一种选择是将函数包装成lambda。
答案 1 :(得分:0)
您可以将std::function
与lambda
或std::bind
:
class DailyActivity {
public:
explicit DailyActivity(std::function<void ()> f) : m_function(f) {}
void run() { m_function(); }
private:
std::function<void ()> m_function;
};
并称之为
DailyActivity activity1(&function1);
DailyActivity activity2([](){function2(1);});