Friend Function 需要一个 Helper Function

Friend Function needs a Helper Function

在我的 .h 文件中,我有这样的 class:

#pragma once
class Widget {
    int private_data;
    friend void foo(Widget& w);
}

当我实现 foo 时,我发现我需要一个辅助函数:

static void foohelper(Widget& w) {
    printf("further processing %d", w.private_data);
}

void foo(Widget& w) {
    printf("processing %d", w.private_data);
    foohelper(w);
}

我不想把foohelper放在.h文件中,因为它是一个实现细节,但这意味着它没有办法直接变成friend .

在这个例子中,可以直接传递 private_data,但在实际用例中,当 Widget 有更多私有变量时,这并不能很好地扩展。

我只从 foo 调用 foohelper,所以如果 c++ 支持嵌套函数定义,我就不会有问题:

void foo(Widget& w) {
    void foohelper(Widget& w) { // compiler: function definition is not allowed here
         printf("further processing %d", w.private_data);
    }
    printf("processing %d", w.private_data);
    foohelper(w);
}

但是,c++ 不允许将此作为​​解决方案。

函数是否可以将 friend 状态传递给辅助函数?

C++ 没有内部函数,但您可以为此使用 lambda:

void foo(Widget& w) {
    auto foohelper = [](Widget& w) {
         printf("further processing %d", w.private_data);
    };
    printf("processing %d", w.private_data);
    foohelper(w);
}