我有一个类A
其中有一个成员变量vector<B>
.我想定义一个名为 DoToAll(funcPtr)
的函数模板这将迭代所有 vector 并应用该函数。
class A
{
vector<B> v;
template <?????>
void DoToAll(f);
loop on v and apply the member function f;
}
class B{
void f1();
void f2();
.
.
.
}
我怎么写DoToAll
?
最佳答案
你是否坚持参数必须是一个函数指针?否则,它可能只是
template <class F>
void DoToAll(F f) {
std::for_each(v.begin(), v.end(), f);
}
这适用于每个 f
st。 f(x)
,其中 x
是 vector 的一个元素,是有效的。这意味着 std::function
和 std::bind
等函数指针和仿函数都可以。不幸的是,这不包括成员函数指针,因为您称它们为 x->*f()
,而不是 f()
。但这也可以通过将成员函数指针包装到一个可以正确转发调用的仿函数中来克服。标准已经提供了这样的适配器,适合您的是 mem_fun_ref_t
.您可以添加一个采用函数指针的 DoToAll
重载:
template <class This, class Ret>
void DoToAll(Ret (*This::f)()) {
std::for_each(v.begin(), v.end(), std::mem_fun_ref(f));
}
关于c++ - 定义接收指向其他类成员函数的指针的成员函数模板添加应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005459/