我想知道一种聪明的方法来避免在类似结构的以下声明中重复自己。下面代码中的所有结构都公开继承自 boost::spirit::qi::symbols,其中每个结构的 EnumType 都不同。
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 Library 中的其他一些技巧?