小编Ogu*_*ius的帖子

如何在c ++迭代器类型中包装std :: chrono

我尝试创建接收特定时间类型的模板参数的迭代式,说std::seconds,std::hours等等,我希望它获得作为参数2点的值表示time_points指定的持续时间,并能够使用这样的构建在基于循环的范围内,time_point通过以该持续时间或可能具有指定持续时间为单位增加电流,如下所示:

DateRange<std::seconds> dr(now() , 50);
for(auto d : dr){
 // do something at unit time
}
Run Code Online (Sandbox Code Playgroud)

我试图用这种方式实现它

   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; …
Run Code Online (Sandbox Code Playgroud)

c++ iterator

7
推荐指数
1
解决办法
167
查看次数

不能解引用值初始化迭代器

我正在玩 C++ 的建议 2d 图形库,我从这里获得的旧实现https://github.com/cristianadam/io2d,我试图在显示表面上渲染图像表面,我将其加载到向量中使用 std::copy 算法的无符号字符

auto loadimg(std::ifstream  &file) {
    std::vector<unsigned char> img_data{};
    std::copy(std::istream_iterator<unsigned char>(file) , 
    std::istream_iterator<unsigned char>(), img_data.begin());
    return img_data;
}
Run Code Online (Sandbox Code Playgroud)

我也试过std::move了。

loadimg 函数的客户端是这样的

std::ifstream file("packagelevel.png");
img_surf.data(loadimg(file));
Run Code Online (Sandbox Code Playgroud)

尽管程序使用 Visual Studio 2017 编译。但我在调试时遇到错误“无法取消引用值初始化迭代器”,并且在 loadimg 返回语句中抛出了异常。我做错了什么?

c++ iterator

6
推荐指数
2
解决办法
1万
查看次数

标签 统计

c++ ×2

iterator ×2