假设我有一个名为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);
}
答案 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;
};