c++ 如何为结构中的函数重写全局函数?

z4iuyo4d  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(123)

我希望结构节点中的函数f2调用节点中的函数f1,而不是全局函数f1。

#include <iostream>
#include <functional>

int f1()
{
    return 1;
}

int f2()
{
    return f1();
}

struct node
{
    int f1()
    {
        return 2;
    }
    std::function<int()> f2 = ::f2;
};

int main()
{
    node a;
    std::cout << a.f2() << "\n";
    return 0;
}

我希望结构节点中的函数f2调用节点中的函数f1,而不是全局函数f1。

r3i60tvu

r3i60tvu1#

你可以通过在node中添加一个(第二个)构造函数来实现,该构造函数接受一个callable,并将其赋值给node::f2

#include <iostream>
#include <functional>

int f1()
{
    return 1;
}

int f2()
{
    return f1();
}

struct node
{
    node () = default;
    node (std::function<int()> assign_to_f2) { f2 = assign_to_f2; }

    int f1 ()
    {
        return 2;
    }

    std::function<int()> f2 = ::f2;
};

int main()
{
    node a;
    std::cout << a.f2() << "\n";
    node b ([&b] () { return b.f1 (); });
    std::cout << b.f2() << "\n";
    return 0;
}

输出量:

1
2

Live Demo

相关问题