考虑这个模板功能:
template<class T, class F> inline
auto transform(const vector<T>& l, F func) -> vector<decltype(func(T{}))>
{
vector<decltype(func(T{}))> out(l.size());
std::transform(l.begin(), l.end(), out.begin(), func);
return out;
}
此功能可以称为
auto out = transform(intputVector, functor)
仿函数必须是静态成员函数或全局函数。
有没有办法修改上面的代码以处理非静态成员函数?
struct Test {
Test() {
vector<int> vx = { 1, 2, 3 };
auto vy1 = transform(vx, staticMemberFunc); // is fine
auto vy2 = transform(vx, memberFunc); // does not compile
}
flt memberFunc(int x) {
return 2 * x;
}
static flt staticMemberFunc(int x) {
return 2 * x;
}
};
答案 0 :(得分:4)
您可以使用lambda绑定对象指针:
auto vy2 = transform(vx, [this](int x){return this->memberFunc(x);});
答案 1 :(得分:2)
是,
std::bind()
为您提供一个可以传递的仿函数