for_each()的使用为什么会出现以下的一个问题:::

C++语言 码拜 9年前 (2015-11-16) 922次浏览
代码如下:::
std::for_each(w, w + 4,std::mem_fun_ref(&Worker::Print));
错误信息如下:::
错误 1 error C2064: 项不会计算为接受 1 个参数的函数 d:\visual studio 2010\安装目录\vc\include\algorithm 22
解决方案:7分
1)自定义仿函数 把 os  和成员函数传进去
2)利用 成员函数类
3)利用 bind 处理
解决方案:3分
bind2nd
解决方案:2分
#include <iostream>
#include <vector>
#include<functional>
#include <algorithm>
using namespace std;
struct state{
int x,y;
state(int x=0,int y=0):x(x),y(y){};
void Print(std::ostream &os)const {
    os<<” (“<<x<<“,”<<y<<“) “;
}
};
class fun{
    std::ostream &os;
    void (state ::*pf)(std::ostream &os)const;
    public:
    fun(std::ostream&os,void (state ::*f)(std::ostream &os)const):os(os),pf(f){};
    void operator ()(const state &s){
    (s.*pf)(os);void (state ::*pf)(std::ostream &os);
    };
};
int main()
{
    vector<state> v{{1,1},{2,2},{3,3},{4,4},{5,5},{6,6},{7,7},{8,8},{9,90},{10,110}};
    for_each(v.begin(),v.end(),fun(cout,&state::Print));
    return 0;
}
解决方案:3分
class fun{
    std::ostream &os;
    void (state ::*pf)(std::ostream &os)const;
    public:
    fun(std::ostream&os,void (state ::*f)(std::ostream &os)const):os(os),pf(f){};
    void operator ()(const state &s){
    (s.*pf)(os);
    };
};
解决方案:3分
//你这个,直接用仿函数这么做就可以了,
struct fun{
fun (void (Worker::*pf)(std::ostream &),std::ostream& os=std::cout):f(pf),ros(os){};
std::ostream &ros
void (Worker::*f)(std::ostream &);
std::ostream &os;
void operator()(Worker& w){
      w.*f();
}
};
std::for_each(w, w + 4,fun(Worker::Print));///这是仿函数的
////注意,仿函数构造函数,假如不含有缺省参数,函数本身的缺省参数,可能不起作用。
///这是 mem_fun_ref ,和 bind2nd 结合的
for_each(w,w+4,std::bind2nd( std::mem_fun_ref (&Worker::Print),std::cout));
解决方案:2分
由于手头不是最新版本(不是正版吧),发现
VC bind2nd,bind1st ,等实现有 bug
当参数为 std::ostream & 不能编译通过。
估计后继版本,(至少发行版)应该改掉了,起码 2015 改掉了
2008,2010 版,都有问题

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明for_each()的使用为什么会出现以下的一个问题:::
喜欢 (0)
[1034331897@qq.com]
分享 (0)