如何将方法的值保留在类内部的内存中?

时间:2019-06-13 08:10:38

标签: c++

假设我有一个名为function1的方法,该方法存储在类cls中。我如何修改以下函数,以便如果通过val1传递相同的值,则不必调用returnhandle函数?

class cls
{
public:
    void function1(const int& val1, int& val2, int& data);
};

void cls::function1(const int& val1, int& val2, int& data)
{
   int handle;
   handle = returnhandle(val1);
   data = readhandleddata(handle, val2);
} 

2 个答案:

答案 0 :(得分:1)

如评论中所述,创建一个已经计算出的结果图,首先检查它是否在其中,如果不存在,则对其进行计算,存储并返回。

class cls
{
    std::map<int, int> data_map;
public:
    void function1(const int& val1, int& val2, int& data);
};

void cls::function1(const int& val1, int& val2, int& data)
{
   int handle;
   auto i = data_map.find(val1); 
   if (i != data_map.end()) {
        return i->second;
   }
   handle = returnhandle(val1);
   data = readhandleddata(handle, val2);
   data_map[val1] = data;
} 

如果您的回调不慢,或者您没有得到太多的缓存命中率,那么这会使您的程序变慢。

答案 1 :(得分:0)

只需存储关系val-句柄。可能的解决方案:

class cls
{
public:
    void function1(const int val1, int& val2, int& data)
    {
        if (_handles.find(val1) == _handles.end())
            _handles[val1] = returnhandle(val1);
        data = readhandleddate(_handles.at(val1), val2);
    }

private:
    std::unordered_map<int,int> _handles;
};