在C++中,这样调用对象方法是可能的吗?

在C++中,这样调用对象方法是可能的吗?,c++,methods,C++,Methods,以下是我的类定义: class A { public: void do_lengthy_work() { cout << "working." << endl; } }; 是否也可以使用以下变量调用相同的方法 A::do_lengthy_work(a); 是的,如果该方法被声明为静态的,这意味着它不属于该类的特定实例 class A { public: static void do_lengthy

以下是我的类定义:

class A {
    public:
        void do_lengthy_work() {
        cout << "working." << endl;
        }
};
是否也可以使用以下变量调用相同的方法

A::do_lengthy_work(a);

是的,如果该方法被声明为静态的,这意味着它不属于该类的特定实例

class A {
    public:
    static void do_lengthy_work() {
        cout << "working." << endl;
    }
};

A::do_lengthy_work();
你可以这样做

static void do_lengthy_work(A& a) {
    a.do_lengthy_work();
}

你写的方式,不,你不能那样做。您可以创建静态重载,尽管我建议您不要这样做:

class A {
    public:
        void do_lengthy_work() {
        cout << "working." << endl;
        }

        static void do_lengthy_work(A& a) {
            a.do_lengthy_work();
        }
};

然而,这可能令人困惑。你为什么要这样做?为什么不能调用a.do\u long\u work?

您可以使用mem\u fun\u ref包装函数:

这对于STL算法非常有用,例如对于每种算法:


只是好奇,因为这是可以用Python实现的。
class A {
    public:
        void do_lengthy_work() {
        cout << "working." << endl;
        }

        static void do_lengthy_work(A& a) {
            a.do_lengthy_work();
        }
};
mem_fun_ref(&A::do_lengthy_work)(a);
std::vector<A> vec;
std::for_each(vec.begin(), vec.end(), mem_fun_ref(&A::do_lengthy_work));
std::vector<A *> vecp;
std:for_each(vecp.begin(), vecp.end(), mem_fun(&A::do_lengthy_work));