这是我的班级定义:
class A {
public:
void do_lengthy_work() {
cout << "working." << endl;
}
};
我有A
类型的对象,我想在其上调用do_lengthy_work()
:
A a;
a.do_lengthy_work();
是否也可以使用以下某些变体调用相同的方法?
A::do_lengthy_work(a);
答案 0 :(得分:12)
您可以使用mem_fun_ref
包裹该函数:
mem_fun_ref(&A::do_lengthy_work)(a);
这对于像for_each
这样的STL算法非常有用:
std::vector<A> vec;
std::for_each(vec.begin(), vec.end(), mem_fun_ref(&A::do_lengthy_work));
如果您有A *
,则可以使用mem_fun
:
std::vector<A *> vecp;
std:for_each(vecp.begin(), vecp.end(), mem_fun(&A::do_lengthy_work));
答案 1 :(得分:2)
是的,如果该方法被声明为static
,则意味着它不属于该类的特定实例。
class A {
public:
static void do_lengthy_work() {
cout << "working." << endl;
}
};
A::do_lengthy_work();
答案 2 :(得分:2)
你可以这样做。
static void do_lengthy_work(A& a) {
a.do_lengthy_work();
}
答案 3 :(得分:2)
你写它的方式,不,你不能这样做。您可以创建一个静态重载,但我建议不要这样做:
class A {
public:
void do_lengthy_work() {
cout << "working." << endl;
}
static void do_lengthy_work(A& a) {
a.do_lengthy_work();
}
};
然而,这可能令人困惑。你为什么要这样做?为什么不能只拨打a.do_lengthy_work()
?