【发布时间】:2018-07-10 22:28:15
【问题描述】:
我正在尝试编写一个随时间滑动的滑动窗口,并将最旧的数据作为模板类删除。我使用 std::map 作为容器和 std::chrono 来操纵时间。 我在负责删除早于 X 毫秒的数据的方法中出现编译时错误:
include/c++/5.4.0/bits/stl_pair.h:170:8: error: no viable overloaded '='
first = std::forward<first_type>(__p.first);
我不明白为什么std::chrono::steady_clock::time_point 没有可行的“运算符=”。
我使用 clang++ 编译器。
这是模板代码:
#include <algorithm>
#include <chrono>
#include <map>
#include <utility>
template <class Data, class Clock, class Time = typename Clock::time_point>
class TimeSlideWindow {
private:
std::map<Time, Data> mData;
public:
void insert(Data value)
{
mData.insert(std::make_pair(Clock::now(), value));
}
void clearOlderThan(std::chrono::milliseconds ms)
{
Time now = Clock::now();
remove_if(mData.begin(),
mData.end(),
[ms, now](const std::pair<Time, Data> &elem) {
return elem.first < (now - ms);
});
}
};
这里是模板实例化:
TimeSlideWindow<unsigned long, std::chrono::steady_clock> window;
window.clearOlderThan(std::chrono::milliseconds(3));
你能解释一下问题出在哪里吗?谢谢。
【问题讨论】:
标签: c++ templates compiler-errors