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

发布于 2024-09-02 08:08:55 字数 362 浏览 6 评论 0原文

这是我的类定义:

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

Here's my class definition:

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

I have an object of type A, and I want to call do_lengthy_work() on it:

A a;
a.do_lengthy_work();

Is it also possible to call the same method using some variant of the following?

A::do_lengthy_work(a);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

葮薆情 2024-09-09 08:08:56

你可以这样做。

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

You could do this.

static void do_lengthy_work(A& a) {
    a.do_lengthy_work();
}
我ぃ本無心為│何有愛 2024-09-09 08:08:56

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

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

The way you wrote it, no you can't do that. You could create a static overload, although I would advise against this:

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

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

However, this can be confusing. Why do you want to do this? Why can't you just call a.do_lengthy_work()?

南风起 2024-09-09 08:08:56

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

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

A::do_lengthy_work();

Yes, if the method is declared to be static, meaning it does not belong to a particular instance of the class.

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

A::do_lengthy_work();
请叫√我孤独 2024-09-09 08:08:55

您可以使用 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));

You can wrap the function with mem_fun_ref:

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

This can be very useful for STL algorithms like for_each:

std::vector<A> vec;
std::for_each(vec.begin(), vec.end(), mem_fun_ref(&A::do_lengthy_work));

If you have an A *, you would use mem_fun:

std::vector<A *> vecp;
std:for_each(vecp.begin(), vecp.end(), mem_fun(&A::do_lengthy_work));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文