【发布时间】:2011-05-19 18:20:37
【问题描述】:
我想在 C++ 中实现一个类 b,它可以通过封装该迭代器类型的成员集进行某种迭代。喜欢:
b_object.for_each_x_do(function_f);
所以 function_f 会得到 x 成员中的每个人并做任何事情。比方说:
void function_f(x_member_type x){ cout << x << endl; }
好的。所以我试图通过如下代码来实现:
class b{
int *x;
public:
void foreach_x_do(void (*f)(int)){
while(*x++) // or any kind of iteration through x
f(*x);
}
};
class a{
b b_inst;
public:
void f(int x) { }
a(){
b_inst.foreach_x_do(f); // by mistake it was b_inst.foreach_x_do(f)(), however this wasn't the point at all.
}
~a(){}
};
int main(){}
但是,我收到了这个错误,编译时:
fp.cpp: 在构造函数
‘a::a()’:
fp.cpp:17: 错误: 没有匹配函数调用‘b::foreach_x_do(<unresolved overloaded function type>)’
fp.cpp:6:注意:候选人是:void b::foreach_x_do(void (*)(int))
谁能帮忙编译一下?
【问题讨论】:
-
一方面,您传递给
foreach_x_do的f不是void(*)(int),而是void (a::*)(int)。 -
只是一个旁注,你应该用大写来命名你的类。所以
class B而不是class b。只是为了符合常见用法。 -
This FAQ 会给你提供比你想知道的更多关于传递成员函数的信息。
标签: c++ member-function-pointers