在我的.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有更多私有变量时,这不能很好地扩展。
我只从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状态传递给助手函数?
发布于 2019-12-14 06:57:36
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);
}https://stackoverflow.com/questions/59330755
复制相似问题