我正在制作一个游戏,其中我有一个级别类,负责将所有对象存储在向量中并对它们进行更改。
我还有一个叫做Engine.h的类,它有静态函数,它根据向量级别来计算事物,但是不改变它们中的任何东西。Level调用引擎函数并根据返回的内容执行操作。
但是由于引擎需要查看这个级别所拥有的向量,所以我不得不向每个引擎函数传递一串向量指针(const),以便它能够根据向量的当前状态进行计算。
是否有任何方法使引擎只访问所有级别的成员变量,但不能编辑其中任何一个。某种“康斯特朋友”?
我刚刚意识到有一个对象级别。因此,我还需要有一种方法,为引擎指定一个特定的对象级别,它可以是一个“const朋友”。也许这事太复杂了。如果没有解决方案,那么将许多成员变量传递给引擎函数是不好的做法,还是这样做的。如何传递一个指向级别的指针,即const (这会使所有级别成员变量也成为const吗?)
发布于 2014-08-30 13:32:31
假设您有一些类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。也许在某些函数中,它需要访问x变量的Foo,您可以使用getter。
class Bar
{
void doStuff (Foo a)
{
int answer = a.getX();
std::cout << answer << std::endl;
}
};现在我们可以看一个快速的演示。我们创建了一个Foo实例和一个Bar实例。然后我们可以为x设置Foo值,并从Bar的doStuff函数中访问它。
int main()
{
Bar myBar;
Foo myFoo;
myFoo.setX(5);
myBar.doStuff(myFoo); // will output 5
return 0;
}发布于 2014-08-30 14:01:52
如果有帮助的话,你可以做这样的事情:
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
};https://stackoverflow.com/questions/25582844
复制相似问题