【发布时间】:2013-03-19 07:00:00
【问题描述】:
假设我有一个类和一个函数
class A
{
int a;
int b;
int mul()
{
return a+b;
}
};
...
void func(int af, int bf, int (*fc)())
{
...
}
在main函数中,该函数应该使用A类的方法
int main
{
A as;
...
func(as.a, as.b, as.mul);
}
但是,我做不到,编译器一直告诉我我通过了
(int&, int&, 'unresolved overloaded function type')
变成候选函数
(int, int, void(*)()).
为什么会这样,以及如何将一个类的方法传递给另一个函数?
哦,我想我应该把问题说清楚一点。 func(...) 实际上是我正在研究的算法中的一个函数。而class A 是一个模型,它将使用该算法进行模拟。所以我认为我不会在函数 B 中专门使用 A 的实例,而只是将 A 的方法和组件传入并使用它们。
更新:有些人提到在 A 类中使用静态方法。但是,这仍然是部分解决方案。使用静态方法mul() 将迫使我声明 a 和 b 都是静态的。如果我必须使用 A 的多个实例,并且我的 main 函数中的每个实例中的方法 a、b 不同,那么使用静态变量就会失败。
那么,关于如何在不使用静态变量/方法的情况下解决此问题,还有其他建议吗?我记得在 python 等脚本语言中,传递任何类型的方法基本上都不是问题。为什么我不能在 C++ 中做类似的事情?或者 C++ 中是否有解决方法可以帮助我做到这一点?
【问题讨论】:
-
你想做什么,更具体地说?
-
您可以使用
boost::bind做您需要的事情,或者如果 C++11 可用,您可以使用 lambda。 -
正如 Song Wang 和 Andy 所建议的,问题出在函数指针上。如果要将类的函数方法传递给函数,则它必须是静态的,以便有一个定义明确的指针可以传递。
-
@AndyProwl,对不起,我只是想避免过多的线程,以便减少冗余信息。我又接受了。希望不会造成任何损害。哦,顺便问一下,你知道除了使用静态方法之外的另一种方法来实现类似的目标吗?谢谢。
标签: c++ class function methods