【发布时间】:2018-11-02 08:54:35
【问题描述】:
我正在尝试创建一个可迭代类型,它接收特定持续时间类型的模板参数,例如 std::seconds 、 std::hours 等,我希望它接收代表 time_points 的参数 2 值指定的持续时间,并能够通过将当前time_point 增加该持续时间的单位或指定的持续时间来在基于范围的 for 循环中使用此类构造,如下所示:
DateRange<std::seconds> dr(now() , 50);
for(auto d : dr){
// do something at unit time
}
我尝试过这样实现
using namespace std::chrono;
template<typename Duration , typename Clock_t = high_resolution_clock,
typename Time_type = time_point<Clock_t, typename Duration> , typename
Time_pointer = Time_type* >
class DateRange {
using Time_type_t = typename Time_type::duration;
public:
DateRange(Time_type_t start, Time_type_t end) :
m_begin(start),
m_end(end)
{
}
DateRange(Time_type_t end):
m_begin(Clock_t::now())
{
}
Time_pointer begin(){
return &m_begin;
}
Time_pointer end() {
return &m_end;
}
Time_pointer operator++(){
present +=Duration(1);
return present_point;
}
Time_type operator*(){
return present;
}
private:
Time_type m_begin;
Time_type m_end;
Time_type present;
Time_pointer present_point = &present;
Clock_t l_clock;
};
int main()
{
DateRange<seconds> dr(40s);
dr.operator++();
std::cout << (*dr).time_since_epoch().count();
}
'std::chrono::time_point::time_point(std::chrono::time_point &&)': 无法将参数 1 从 'std::chrono::steady_clock::time_point' 转换为 'const _Duration &' DateRange在第 19 行
【问题讨论】:
-
你的问题是什么?
-
考虑将此问题迁移到Code Review。
-
您似乎试图在同一个类中定义一个范围(开始和结束)和一个迭代器(运算符 ++ 和 *),这充其量是令人困惑的
-
a range-based for loop 得到 begin 和 end iterators 从 range 表达式(
dr案子)。这两种行为理论上可以在同一个类中定义,但这不是它的意图 -
@kmdreko FWIW,
fs::directory_iterator做了类似的事情。所以这并不少见。