首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

念写一个类似stl sort的函数 error C2064

2013-02-18 
想写一个类似stl sort的函数 error C2064想写一个函数,它里面的某个执行步骤由将来调用它的人来决定。很类

想写一个类似stl sort的函数 error C2064
想写一个函数,它里面的某个执行步骤由将来调用它的人来决定。很类似STL的sort函数。
我看了VS2010的sort的源码,它里面用的不是函数指针,而是函数对象(应该是这样吧,没有typedef)

template<class _FunPtr>
void Print(_FunPtr p)
{
vector<int> vt;
vt.resize(10);

for (int i=0;i<vt.size();i++)
{
p(vt[i]);//这里会报error C2064
}
}


写一个Print函数,将来怎么打印这个vector,由调用这个函数的用户来决定。

class CEdit
{
public:
char* str;

CEdit(const char* _str):str((char*)_str)
{

}
};

class CMyDialog
{
CEdit edit;
void print(int i)
{
cout<<"print at "<<edit.str<<" "<<i<<endl;
}
public:
CMyDialog():edit("MyDlg's Edit")
{

}
void Fun()
{
/*

大家可能注意到了这个写法,这种写法是调用类成员函数的写法,我用sort函数测试过,可行*/
Print(&CMyDialog::print);
}
};

void main()
{
CMyDialog dlg;
dlg.Fun();
}

[解决办法]
虽然这么写可以
Print(&CMyDialog::print);
但有一点很重要CMyDialog::print必须是static的
[解决办法]
Print(boost::bind(&CMyDialog::print, , this, _1));
Print([this](int s){ print(s); });
这两种办法都行

热点排行