C++ C++;不重复地声明许多类似的类
我想知道一个聪明的方法,避免在下面的类似结构声明中重复我自己。下面代码中的所有结构都公开继承自boost::spirit::qi::symbols,其中每个结构的枚举类型都不同C++ C++;不重复地声明许多类似的类,c++,metaprogramming,declaration,C++,Metaprogramming,Declaration,我想知道一个聪明的方法,避免在下面的类似结构声明中重复我自己。下面代码中的所有结构都公开继承自boost::spirit::qi::symbols,其中每个结构的枚举类型都不同 struct website_ : qi::symbols<char, Website> { website_() : qi::symbols<char, Website>(website_names, Website_values) { } } website_; struct curre
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_;
结构网站:qi::符号
{
网站名称:qi::符号(网站名称、网站值){}
}网站;;
结构货币名称:qi::符号
{
货币名称():qi::符号(货币名称、货币值){}
}货币名称;
例如,在哪里
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*/ };
enum网站{/*网站列表*/};
const std::vector site_values={/*与上面的列表相同*/};
const std::vector网站名称={/*网站对应名称列表*/};
目标是初始化每个结构,只提供适当的枚举、枚举值向量和带有值名称的字符串向量
我已经想到了一个解决方案,它包含一个新的子类qi::symbols,我的所有结构都将从中继承,但我认为这可能是一种过度使用,另一种可能是使用宏(我不太熟悉)。还有其他使用其他元编程的方法吗?或者我已经在使用Boost库中的其他技巧?这就是模板被发明的原因
template<EnumType t>
struct symbol_type: qi::symbols<char, t>
{
symbol_type(const std::vector<std::string>& names, const std::vector<t>& values)
: qi::symbols<char, t>(names, values) { }
};
symbol_type<Website> website(website_names, website_values);
symbol_type<Currency> currency(currency_names, currency_values);
模板
结构符号类型:qi::符号
{
符号类型(常量标准::向量和名称,常量标准::向量和值)
:qi::符号(名称、值){}
};
符号类型网站(网站名称、网站值);
符号类型货币(货币名称、货币值);
这就是模板被发明的原因
template<EnumType t>
struct symbol_type: qi::symbols<char, t>
{
symbol_type(const std::vector<std::string>& names, const std::vector<t>& values)
: qi::symbols<char, t>(names, values) { }
};
symbol_type<Website> website(website_names, website_values);
symbol_type<Currency> currency(currency_names, currency_values);
模板
结构符号类型:qi::符号
{
符号类型(常量标准::向量和名称,常量标准::向量和值)
:qi::符号(名称、值){}
};
符号类型网站(网站名称、网站值);
符号类型货币(货币名称、货币值);
如果我理解您的问题,您可以使用以下代码:
typedef qi::symbols<char, Website> website_;
typedef qi::symbols<char, Currency> currency_name_;
typedef qi::symbols网站;
类型定义qi::符号货币名称;
如果我理解您的问题,您可以使用以下代码:
typedef qi::symbols<char, Website> website_;
typedef qi::symbols<char, Currency> currency_name_;
typedef qi::symbols网站;
类型定义qi::符号货币名称;
为什么你的答案看起来很愚蠢,而它还需要用给定的值初始化struct qi::symbols?什么,比如website\u网站(website\u名称,website\u值)代码>?甚至那也比我的好!为什么您的答案看起来很愚蠢,而它还需要用给定的值初始化struct qi::symbols?什么,比如website\uweb(website\u名称,website\u值)代码>?甚至那也比我的好!