我正在制作一个游戏,其中我有一个Level类,用于将所有对象存储在向量中并更改它们。
我还有另一个类,叫做Engine.h,它有静态函数,可以根据Level拥有的向量来计算东西,但不会改变其中的任何内容。Level调用引擎函数,并根据返回的内容执行操作。
但是,由于Engine需要查看Level拥有的向量,我被迫向每个Engine函数传递一组向量指针(const),以便它可以根据向量的当前状态进行计算。
有没有什么方法可以让Engine只访问Level的所有成员变量,但不能编辑其中的任何一个。某种"const friend"?
我刚刚意识到有一个对象级别。因此,我还需要有一种方法来为Engine分配一个级别的特定对象,它可以与该对象成为"constfriend"。也许这变得复杂了。如果没有解决方案,那么将大量成员变量传递给Engine函数是一种糟糕的做法,还是这样做。传递一个指向Level的const指针(这会使Level的所有成员变量也变为const吗?)
假设您有一个类Foo
,它有一个要访问的成员变量x
。您可以制作const
函数,这些函数按值访问成员变量。由于它们是const
,因此它们可能不会修改任何成员变量。
class Foo
{
public:
Foo() : x{0} {} // constructor
int getX() const { return x; } // this is a "getter"
void setX(int value) { x = value; } // this is a "setter"
private:
int x;
};
然后你就可以上另一节课Bar
了。也许在某些函数中,它需要访问Foo
的x
变量,您可以使用getter。
class Bar
{
void doStuff (Foo a)
{
int answer = a.getX();
std::cout << answer << std::endl;
}
};
现在我们可以看一个快速演示。我们做了一个Foo
的实例和一个Bar
的实例。然后,我们可以为Foo
设置x
值,并从Bar
的doStuff
函数访问它。
int main()
{
Bar myBar;
Foo myFoo;
myFoo.setX(5);
myBar.doStuff(myFoo); // will output 5
return 0;
}
如果有帮助,你可以做这样的事情:
class Level
{
private:
std::vector<float> stuff;
public:
// give outsiders const access
const std::vector<float>& const_stuff = stuff; // c++11 else use ctor
const std::vector<float>& get_stuff() const { return stuff; } // more idiomatic
};