65,180
社区成员




void (*Fun)();
class A{
A(){
Fun=B;//Ok
Fun=C;//err
}
static void B();
void C();
};
int main()
{
A a();
return 0;
}
#include <iostream>
class test
{
public:
void print()
{
std::cout << __func__ << std::endl;
}
};
template <typename CLASS_TYPE, typename RETURN_TYPE>
class mem_fun_obj
{
public:
mem_fun_obj(CLASS_TYPE *obj, RETURN_TYPE (CLASS_TYPE::*f)())
: obj_(obj), f_(f)
{ }
RETURN_TYPE operator()()
{
return (obj_->*f_)();
}
private:
CLASS_TYPE *obj_;
RETURN_TYPE (CLASS_TYPE::*f_)();
};
int main()
{
test t;
mem_fun_obj<test, void> fun_obj(&t, &test::print);
fun_obj();
return 0;
}
或者这样,直接把实例也绑上去。#include <iostream>
class test
{
public:
void print()
{
std::cout << __func__ << std::endl;
}
};
template <typename CLASS_TYPE, typename RETURN_TYPE>
class mem_fun_obj
{
public:
mem_fun_obj(RETURN_TYPE (CLASS_TYPE::*f)()) :f_(f) { }
RETURN_TYPE operator()(CLASS_TYPE &obj)
{
return (obj.*f_)();
}
private:
RETURN_TYPE (CLASS_TYPE::*f_)();
};
int main()
{
mem_fun_obj<test, void> fun_obj(&test::print);
test t;
fun_obj(t);
return 0;
}
楼主看这样行不