65,186
社区成员




void do_sum_avg(int values[], int n, int& sum, float& avg)
{
sum = 0;
for (int i = 0; i < n; i++)
sum += values[i];
avg = (float)sum / n;
}
int main()
{
boost::function<void (int values[], int n, int& sum, float& avg)> sum_avg;
sum_avg = &do_sum_avg;
int values[] = {1, 2, 3, 4, 5};
int s;
float av;
sum_avg(values, 5, &s, &av);
return 0;
}
template <typename T,typename R,int (R::*Callback)()>//用vc2005调试过程中把T::Callback误写为R::Callback了,结果报错
class Help
{
public:
Help(T& t): obj(t)
{
}
R Exec()
{
return (obj.*Callback)();
}
private:
T& obj;
};
class Demo
{
public:
int GetInt32()
{
return 20;
}
};
int main(int argc, char* argv[])
{
Demo d;
Help <Demo,int,&Demo::GetInt32> cb(d);
return 0;
}
#include <iostream>
using namespace std;
template <typename T,typename R,R (T::*Callback)()>
class Help
{
public:
Help(T& t):obj(t)
{
}
R Exec()
{
return (obj.*Callback)();
}
private:
T& obj;
};
class Demo
{
public:
int GetInt32()
{
return 20;
}
};
int main(int argc, char* argv[])
{
Demo d;
Help <Demo,int,&Demo::GetInt32> cb(d);
cout<<cb.Exec()<<endl;
return 0;
}