为什么for_each( ..., _Fn1& _Func )只能接收全局函数而不能接收成员函数?
class MyClass {
public:
void memberFunc() {
std::cout << "调用成员函数" << std::endl;
}
static void classFunc() {
std::cout << "调用类函数" << std::endl;
}
};
void globalFunc() {
std::cout << "调用全局函数" << std::endl;
}
template<typename _Fn>
void test(_Fn& Func) {
Func();
}
int main()
{
test<void()>(globalFunc);
test<void()>(MyClass().memberFunc);//非标准语法;请使用 "&" 来创建指向成员的指针
}
为什么test<void()>(MyClass().memberFunc);报错?
看网络课程的时候对这部分就不太明白:
为什么这里的for_each只接受形式1,也就是全局函数式的调用?传过去的不都是函数么?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
首先类型就不对
类成员函数的类型应该类似于
(void(A::*)())&A::fun
并且第一个参数应该填写类对象地址(this)
也就是说为了能够接收数据需要两个参数
其次,你获得成员函数的方法能获得类的静态成员函数,不能获得非静态成员函数
楼上说的对。实在想用也不是不可以,用std::bind将对象作为第一个参数与成员函数绑定在一起就好了,当然bind之后返回的其实是一个仿函数,不能转成
void()
。静态函数没有隐含的指针,可以直接转换: