[英]Access struct property by variable value
我的課程中有4個屬性的結構“邊距”。 我沒有寫出四種不同的getter / setter方法,而是認為我可以用更好的方式做到:
class myClass {
private:
struct margin {
int bottom;
int left;
int right;
int top;
}
public:
struct getMargin();
void setMargin(string which, int value);
};
但是如何在函數setMargin()
設置與字符串“which”對應的struct的屬性? 例如,如果我調用myClass::setMargin("left", 3)
,我怎么能將“margin.left”設置為“3”? 最好在保持結構POD的同時 ? 我真的無法弄清楚這一點......
從旁注來看,這真的比編寫許多getter / setter方法更好嗎?
謝謝!
首先,你的想法很糟糕...... :)
請注意,您甚至沒有margin
會員(在下面添加)
如果您不想為每個屬性設置setter / getter,我會使用enum
:
class myClass {
private:
struct margin {
int bottom;
int left;
int right;
int top;
} m; // <--- note member variable
public:
enum Side
{
bottom, left, rigth, top
};
struct getMargin();
void setMargin(Side which, int value);
};
並在setMargin
有一個switch
語句。
void myClass::setMargin(Side which, int value)
{
switch (which)
{
case bottom:
m.bottom = value;
break;
//....
}
}
class myClass {
private:
int margin[4];
public:
enum Side
{
bottom, left, rigth, top
};
void setMargin(Side which, int value);
};
void myClass::setMargin(Side which, int value)
{
margin[which]=value;
}
無論是Luchian還是Gir的建議都是我的偏好。 但是,如果你真的想要一個字符串查找,最好用關聯容器來做。
class MyClass {
std::map<std::string, int> m_;
public:
bool setMargin(std::string which, int value) {
std::map<std::string, int>::iterator i = m_.find(which);
if (i == m_.end()) return false;
i->second = value;
return true;
}
};
這僅在您擁有允許用戶按名稱定義自己的邊距的動態界面時才有用。
您可以使用“相對指針”指向距離struct的地址到特殊元素的距離。 例如:
SetMargin(FIRST,5);
哪個FIRST來自枚舉值,為0。
SetMargin(SECOND,100);
SECOND是4,因為int是我系統中的4個字節
執行:
void SetMargin(enum margin_elements,int a)
{
int *relative=struct_pointer+(int*)margin_elements;
*relative_pointer=a;
return;
}
如果你可以公開保證金,你可以擺脫get,set方法:
class myClass {
public:
struct Margin {
int bottom;
int left;
int right;
int top;
};
Margin margin;
};
myClass mc;
mc.margin.bottom = mc.margin.left;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.