首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Friend函数需要Helper函数

Friend函数需要Helper函数
EN

Stack Overflow用户
提问于 2019-12-14 06:50:50
回答 1查看 94关注 0票数 2

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

代码语言:javascript
复制
#pragma once
class Widget {
    int private_data;
    friend void foo(Widget& w);
}

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

代码语言:javascript
复制
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++支持嵌套函数定义,我就不会有问题:

代码语言:javascript
复制
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状态传递给助手函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-14 06:57:36

C++没有内部函数,但是你可以使用lambda来实现:

代码语言:javascript
复制
void foo(Widget& w) {
    auto foohelper = [](Widget& w) {
         printf("further processing %d", w.private_data);
    };
    printf("processing %d", w.private_data);
    foohelper(w);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59330755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档