gpt4 book ai didi

C++声明许多相似的类而不重复自己

转载 作者:行者123 更新时间:2023-11-30 02:02:21 24 4
gpt4 key购买 nike

我想知道一个聪明的方法来避免在以下类似结构的声明中重复我自己。以下代码中的所有结构都公开继承自 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*/ };

目标是初始化每个结构,只给出适当的枚举、枚举值 vector 和带有值名称的字符串 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);

关于C++声明许多相似的类而不重复自己,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com