簡單地說,你可以」不要以一般的方式去做;根據運行時的名稱無法訪問成員變量。
這通常是通過創建的if-else鏈解決(或交換機),它允許你轉換數據到信息:
char type;
float height;
int age;
cin >> type;
switch(type) {
case 'h': cin >> height; break;
case 'a': cin >> age; break;
}
這是不靈活,但這樣是你的階級結構,對?如果你想讓它變成動態的,像@ riv的回答那樣創建綁定是沒有意義的;班級的任何變化都需要適當的條款。這將是更好地簡單地決定,有些字段是動態存儲地圖:
class C {
int iAlwaysHaveThat;
map<variant<int,float,string>> dynamicValues;
};
這樣,你可以解析配置文件,如:
Obj [
a = 5,
b = 3.14,
name = "some string value"
]
然後通過(根據實際需要訪問它們)函數返回optional
:
optional<variant<...>> getDynamicValue(string const& name) { ... }
這也可能填補違約基礎上一些其他的對象,例如:
{
// ...
auto v = dynamicValues.find(name);
if (v == dynamicValues.end())
return defaultValuesProvider.getDefault(name);
// ...
}
這是一個可能對某些用途實際上有用的解決方案,但是我可能會嵌入腳本語言。
我還是有點迷路。這將如何改變對象的價值? – user2424954
@ user2424954,把它想象成一個散列,你可以從字符串中訪問你的屬性。 – Lefsler
所以在我的情況下,我會做一些像框a;屬於MapData [名稱] =值; a.mapData [name] = value?對於特定的問題,我很抱歉,我對C++ – user2424954