Можно ли вызвать метод объекта таким способом в C ++? - PullRequest
0 голосов
/ 20 мая 2010

Вот мое определение класса:

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 ]

12 голосов
/ 20 мая 2010

Вы можете обернуть функцию с помощью mem_fun_ref:

mem_fun_ref(&A::do_lengthy_work)(a);

Это может быть очень полезно для алгоритмов STL, таких как for_each:

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));
2 голосов
/ 20 мая 2010

Вы могли бы сделать это.

static void do_lengthy_work(A& a) {
    a.do_lengthy_work();
}
2 голосов
/ 20 мая 2010

Как ты это написал, нет, ты не можешь этого сделать. Вы могли бы создать статическую перегрузку, хотя я бы посоветовал против этого:

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()?

2 голосов
/ 20 мая 2010

Да, если метод объявлен как static, что означает, что он не принадлежит конкретному экземпляру класса.

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

A::do_lengthy_work();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...