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);
}
在我的 .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);
}