【发布时间】:2015-11-22 11:42:39
【问题描述】:
我正在尝试将指向成员函数的指针传递给非成员函数,如下例所示:
class Main
{
static void runMain (void (*progress)(double))
{
for (int i=1; i<=100; ++i)
{
// Do something
progress(i/100.0);
}
}
};
class A
{
void setProgress (double) {/*Do something else*/}
void runA ()
{
Main::runMain (&setProgress); // Error: incompatible parameter from void(A::*)(double) to void(*)(double)
}
};
class B
{
void updateProgress (double) {/*More things to do*/}
void runB ()
{
Main::runMain (&updateProgress); // The same error
}
};
由于从 A 传递到 Main 的类型函数 void( A::* )(double) 与 void( * )(double) 不匹配,因此出现错误。
如何在以下约束下传递成员函数:我不允许更改类 A 和 B 的结构,除了 runA 和 runB 实现(但我可以更改 Main 类,包括其函数签名)。
谢谢!
【问题讨论】:
-
制作成员函数
static. -
成员函数在不使用有效
this调用时是否有效?函数如何知道要对哪个类数据进行操作? -
让
Main::runMain接受std::function。然后使用您喜欢的方法传递函数 + 上下文。 -
我从之前问过这个问题的数百种方式中挑选了一个,并将其标记为重复。