Я пытаюсь создать итеративный тип, который получает аргумент шаблона определенного типа продолжительности, скажем std::seconds
, std::hours
и т. Д., И я хочу, чтобы он получил в качестве аргумента 2 значения, представляющие time_points
из указанной длительности и иметь возможность использовать такую конструкцию в диапазоне, основанном на цикле, увеличивая текущий time_point
на единицу этой длительности или, возможно, указанной длительности, что-то вроде следующего:
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 :: stable_clock :: time_point' в 'const _Duration &' DateRange по линии 19