是否可以在C ++中以这种方式调用对象方法?

时间:2010-05-20 00:45:58

标签: c++ methods

这是我的班级定义:

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);

4 个答案:

答案 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()

相关问题