2012-06-07 72 views
2

我有一個std::map<string, double>,其成員是這個樣子:轉換STL映射到一個struct

X = [{"N", 200}, {"sigma", 1.0}, {"T", .2}] 

現在,給定的結構foo Y

struct foo { 
    int N; 
    double T; 
}; 

以編程方式映射鍵/值對X -> Y沒有爲每個X -> Y類型映射編寫定製類?注意的是:

  1. X["sigma"]不在Y,即映射不一定是一個對一
  2. 類型的Y.N是int而X["N"]是雙。

我懷疑答案是否定的,除非在編譯時有一些欺騙行爲。

編輯:可能不清楚我在找什麼。僞代碼版本這個例子看起來是這樣的:

if("N" in X) -> Y.N = X["N"]; 
if("T" in X) -> Y.T = X["T"]; 

或以編程方式:

++沒有反射的概念
for key in Y: 
    if (key in X) -> Y.key = X[key] 
+2

從你的問題中不清楚你想如何做映射。 –

回答

4

編號:C。在編譯時,不再有"foo::N"字符串。編譯器已將源代碼中所有發生的foo::N轉換爲Foo對象內的0字節偏移量。此外,您不能在編譯時枚舉類成員。

0

您要設置在基於地圖元素鍵的(這是一個字符串)結構類型的對象的字段。所以,不,在編譯時不能完成。