本质上我的问题是我正在使用的库中的一个函数(此代码中的函数 Foo)需要一个指向对象(Object * mbar)的指针作为参数。但是,mbar 是 bar 的私有成员变量。
通常,我只会使用 getter 并按值传递,但如果我传递指针,则会直接访问资源,这会破坏封装。任何代码都可以调用 getter 并自由支配来修改它。
接下来我想我可以使用 const 指针,因为它们不允许修改它们指向的资源,但据我所知,我需要修改 Foo 以接受它,这是不可能的,因为它是一个库函数。
我能想到的最后一件事就是简单地使用 Bar 的朋友调用 FoobarFunction,但我一直被告知朋友函数是最后的手段。
有没有办法在不以某种方式破坏封装的情况下做到这一点?
//Main.cpp
#include "Foobar.h"
int main()
{
Foobar fb;
Bar b;
fb.FoobarFunction(b);
return 0;
}
//Bar.h
#include "Object.h"
class Bar
{
private:
Object* mbar;
};
//Foobar.h
#include "Foo.h"
#include "Bar.h"
class Foobar
{
public:
void FoobarFunction(Bar bar)
{
Foo(bar.mbar);
}
};