我尝试创建接收特定时间类型的模板参数的迭代式,说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++ 的建议 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 返回语句中抛出了异常。我做错了什么?