#include <cstdio>
struct Settings
{
int i1, i2;
Settings(int i1, int i2) : i1(i1), i2(i2) {}
struct GeneralSettings
{
int gi1, gi2;
} static gs;
void do_something() const
{
printf("%d %d %d %d\n", i1, i2, gs.gi1, gs.gi2);
}
};
Settings::GeneralSettings Settings::gs;
int main()
{
Settings s1(0,1);
Settings s2(1,0);
s1.gs.gi1 = 1; // I would like to access GeneralSettings like this only!
Settings::gs.gi2 = 1; // Can i prevent global access like this?
s2.do_something();
return 0;
}
請參閱上面的代碼和評論。除了使用Settings::gs
private
和accessors/mutators之外,還有其他方法可以限制對Settings::gs
的訪問,因此只能通過Settings
對象訪問它嗎?它的方式是,任何函數都可以訪問Settings::gs
,無論它是否有權訪問Settings
對象。 Settings::gs
實質上是一個全局對象。如何限制對靜態公衆成員的訪問?
什麼是這樣做的呢? – Holt
@Holt:避免將Settings :: GeneralSettings暴露給每個函數。 –
你已經在Settings結構中顯示了一切,你爲什麼只關心靜態成員? – zoska