2016-02-01 75 views
0

說我有以下結構:使用用戶變量來訪問struct的成員? C++

struct movie { 
    char movie_name[32]; 
    int rating; 
    int release_year; 
    char location; 
} 

通常情況下,我會說 「movie.rating」 訪問評級。

對於這個項目,我必須從一個文本文件輸入。我將從文件中讀取諸如「movie_name」或「rating」或「release_year」的變量,並且給定該變量,我必須訪問結構的相應元素。例如:如果輸入文件讀取「movie_name」,那麼我想訪問movie.movi​​e_name。我如何做到這一點沒有 4 if語句?有另一種方法嗎?

if(input == "movie_name") 
    movie.movie_name = ... 
else if(input == "rating") 
    movie.rating = ... 

我正在使用的真正的結構有20多個成員,所以我試圖找到一種更有效的方式來編寫此代碼。

提前致謝!

+0

添加成員函數。比你可以把指針指向地圖中的那些。這是僞裝成C++的「C」代碼。如果不是,所有的比較都不正確。 – StoryTeller

回答

0

你在找什麼叫反射。不幸的是,它在C++中不受支持。其中一個解決問題的方法這當然不是一個最優是實現你的結構作爲pair<key,value>map如下:

struct movie { 
    std::map<string,ValueType> foo; 
} 

然而,問題是值類型。如果有提升,那麼這可能是更好的解決方案:

struct movie { 
    std::map<string,boost::variant<typeX, typeY>> foo; 
}