正在更新成员变量已设置/已更改

时间:2016-04-28 09:40:58

标签: c++ notifications state

我有一个非常庞大/相关的课程C(很难重构,因为15年以来没有人试图这样做,所以事情已经堆积在椽子上,加上糟糕的设计)包含{名为{1}}的成员变量名为int。每当您从m_Toto实例化对象时,您都会通过C成员函数来设置很多内容,其中包括init()m_Toto。设置并使用某些数据成员后,on可以计算0将具有的值。这个值对于班级所做的其他事情都是至关重要的。

现在,预留了错误的命名,m_Toto是第一次通过m_Toto的调用计算出来的,int C::GetToto()具有以下结构:

int C::GetToto()
{
    if (m_Toto != 0)
        return m_Toto ;
    // else
    // we calculate m_Toto thx to a lot of data etc
}

每当我们需要m_Toto的值时,我们会调用GetToto(),检查m_Toto是否已初始化(非零),然后返回, “真正的”计算仅在第一次完成。

我的问题如下。我的状态Cbool成员变量m_IsBlah定义,应该确定为m_Toto的值。

我怎样才能确保以优雅的方式确保m_IsBlah仅在第一次m_Toto计算时计算出来,而且只有这样才能计算出if public void startResetTimer() { new Timer ().schedule (new TimerTask () { @Override public void run () { ((BaseActivity) context).runOnUiThread (new Runnable () { @Override public void run () { try { long differenceInSeconds = (new Date().getTime() - lastResetTime) / 1000; //divide by 1000 to get time in seconds if(differenceInSeconds >= 30 * 60 * differenceInSeconds) { //30 mins = hours (multiple by 60 to convert into minutes) = 30minutes //resetCounter; activityCounts = 0; //update last reset time lastResetTime = new Date ().getTime(); } } catch (Exception e) { e.printStackTrace (); } } }); } }, 0, 1000); public void insertTestHistory() { synchronized (lock) { SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss", Locale.getDefault()); String date = dateFormat.format(new Date()); previousDate = date; Log.e("activitycount", activityCounts + " " + date); activityCounts++; SQLiteDatabase database = this.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(VALRTApplication.ACTIVITY_LOG_STATUS, previousDate + ",activity," + (activityCounts)); database.insert(VALRTApplication.ACTIVITY_LOG_TABLE, null, values); database.close(); } } 1}}上面那种?还是太过分了?

1 个答案:

答案 0 :(得分:0)

与C ++一样,使用class es来捕获抽象。让类作为C的成员在其构造函数中构建,并报告IsBlah是否以及何时设置,以及是否设置为什么。