我想知道一個聰明的方法,以避免在下面的類似結構聲明中重複自己。以下代碼中的所有結構體都從boost :: spirit :: qi :: symbols公開繼承,其中EnumType對於每個結構體都是不同的。C++聲明許多類似的類而不重複自己
struct website_ : qi::symbols<char, Website>
{
website_() : qi::symbols<char, Website>(website_names, Website_values) { }
} website_;
struct currency_name_ : qi::symbols<char, Currency>
{
currency_name_() : qi::symbols<char, Currency>(currency_names, Currency_values) { }
} currency_name_;
其中,例如
enum Website { /*list of websites*/ };
const std::vector<Website> Website_values = { /*same list as above*/ };
const std::vector<std::string> website_names = { /* list of corresponding names of websites*/ };
的目標是每一個初始化結構只給適當的枚舉,枚舉值向量,並與值的名稱字符串的載體。我已經想到了一個新的qi :: symbols子類的解決方案,從中我可以繼承所有的結構,但我認爲這可能是一個矯枉過正的問題,另一個可能使用宏(我不是很熟悉)。有另一種方法使用其他類型的元編程嗎?或者也許是Boost圖書館的一些其他技巧,我已經在使用它了?
好吧,讓我的答案看起來完全愚蠢 –
爲什麼你的答案看起來很愚蠢,當它也需要初始化結構氣的護理: :具有給定值的符號? – engineerX
什麼,像'website_網站(website_names,website_values);'?即使_that_比我好! –