gpt4 book ai didi

c++ - 将静态函数声明为友元函数?

转载 作者:太空狗 更新时间:2023-10-29 21:18:46 27 4
gpt4 key购买 nike

我在头文件 interface.h 中有一个类 MyClass 声明和一些静态函数(foobar 和更多)在 file1.cpp 中。静态函数仅在 file1.cpp 中使用,但它们需要修改 MyClass` 的私有(private)/ protected 成员。

// in "interface.h"
class MyClass {
// maybe declare as friend?
// friend static void foo(MyClass &ref);
private:
double someval;
}

// in "file1.cpp"
static void foo(MyClass &ref) {
ref.someval = 41.0;
}
static void bar(MyClass &ref) {
ref.someval = 0.42;
}

// function that uses foo/bar
void doSomething(MyClass &ref) {
foo(ref);
}

想法 1:以某种方式将它们声明为 MyClass 的好友?

为什么不好:它们是静态的并且在不同的编译单元中。除此之外,会将它们暴露给不需要了解它们的 MyClass 的用户。

想法 2:没有想法 2。

链接排序:Is it possible to declare a friend function as static?

最佳答案

Sort of linked: Is it possible to declare a friend function as static?

就我个人而言,我发现整个 friend 有点像破解封装,但你问了一个有效的问题,答案是你可以通过 helper 实现你想要的 类:

file1.h

class MyClass {
private:
double someval;

friend class MyClassHelper;
};

file1.cpp

#include "file1.h"


struct MyClassHelper {
static void mutateMyClass(MyClass& ref) {
ref.someval=42;
}
};


// in "file1.cpp"
static void foo(MyClass &ref) {
MyClassHelper::mutateMyClass(ref);
}

你真的确定要这样做吗?您确定不想将 MyClass 的修改器封装在 MyClass 本身中吗?

关于c++ - 将静态函数声明为友元函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29391422/

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