Java静态块的C替代
发布时间:2020-12-15 04:09:57 所属栏目:Java 来源:网络整理
导读:参见英文答案 What’s the C++ idiom equivalent to the Java static block?????????????????????????????????????6个 我正在写一个日期类,我想要一个静态地图将“Jan”映射到1,依此类推.我想知道如何初始化静态地图.这就是我目前正在做的事情,但我只是觉得
参见英文答案 >
What’s the C++ idiom equivalent to the Java static block?????????????????????????????????????6个
我正在写一个日期类,我想要一个静态地图将“Jan”映射到1,依此类推.我想知道如何初始化静态地图.这就是我目前正在做的事情,但我只是觉得与Java中的静态块相比,额外的if语句是不优雅的.我理解C程序的编译要复杂得多,但我仍然想知道是否存在更好的解决方案. class date { static map<string,int> month_map; int month; int year; public: class input_format_exception {}; date(const string&); bool operator< (const date&) const; string tostring() const; }; map<string,int> date::month_map = map<string,int>(); date::date(const string& s) { static bool first = true; if (first) { first = false; month_map["Jan"] = 1; month_map["Feb"] = 2; month_map["Mar"] = 3; month_map["Apr"] = 4; month_map["May"] = 5; month_map["Jun"] = 6; month_map["Jul"] = 7; month_map["Aug"] = 8; month_map["Sep"] = 9; month_map["Oct"] = 10; month_map["Nov"] = 11; month_map["Dec"] = 12; } // the rest code. } // the rest code. 解决方法
对于非c 11系统:如何使用辅助函数并使month_map成为日期的静态const成员,因为它似乎永远不会改变月份名称与其数字的关联,是吗?这样,month_map在你的cpp-File中初始化,而不是在你的构造函数中,它只会让事情变得混乱. (也许你将来会有几个构造函数,然后你必须编写很多样板代码)
const std::map<string,int> createMonthMap() { std::map<string,int> result; // do init stuff return result; } const std::map<string,int> date::month_map(createMonthMap()); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |