gpt4 book ai didi

c++ - Friend 函数需要一个 Helper 函数

转载 作者:行者123 更新时间:2023-12-03 07:01:07 25 4
gpt4 key购买 nike

在我的 .h文件,我有一个这样的类:

#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 时,这不能很好地扩展。有更多的私有(private)变量。

我只调用 foohelper来自 foo ,所以如果 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);
}

关于c++ - Friend 函数需要一个 Helper 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59330755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com