接受指定成员变量(宽松const)修改的c ++ const成员函数

时间:2020-08-09 03:24:20

标签: c++ caching const-method

我有以下课程Sample。说,我想使用成员变量var执行一些繁重的计算,并缓存结果,以防我再次进行相同的计算。我还保证非缓存变量var是const,如果不是,我想在编译时出错。因此,我想做的就是以仅接受heavy_compuation的突变的方式对cache进行常量化。有什么办法可以做这种事情?

#include<iostream>
#include<map>
class Sample
{
  public:
    Sample(int var_) : var(var_){}
    std::map<int, int> cache;
    int var;
    int heavy_computation(int x) 
    {
      std::map<int, int>::iterator iter = cache.find(x);
      if(iter == cache.end()){ // cache doesn't exist
        int y = var + x; 
        cache[x] =y;
        return var;
      }
      std::cout << "cached one" << std::endl; 
      return iter->second;
    }
};

int main(){
  Sample s(0);
  s.heavy_computation(1);
  s.heavy_computation(1);
}

0 个答案:

没有答案