加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读