我尝试创建一个可迭代类型,该类型接收特定持续时间类型的模板参数,例如<div bgIMG></div>
,import { Directive,ElementRef, Renderer2, HostListener } from '@angular/core';
@Directive({
selector: '[bgIMG]'
})
export class MyCustomStyleDirective {
constructor( renderer: Renderer2, el: ElementRef) {
renderer.setStyle(el.nativeElement, 'background-image','http://www.publicdomainpictures.net/pictures/50000/velka/flower-meadow.jpg');
renderer.setStyle(el.nativeElement, 'font-weight','bold');
}
}
html
-----
<div class="container">
<div class="row">
<div bgIMG>
<p>some text</p>
</div>
</div>
</div>
等,我希望它接收作为参数的2个值,这些值表示std::seconds
的指定持续时间,并可以通过将当前std::hours
以该持续时间或指定持续时间的单位增加当前time_points
的方式,在基于for循环的范围内使用这种构造,如下所示:
time_point
我试图以这种方式实现
DateRange<std::seconds> dr(now() , 50);
for(auto d : dr){
// do something at unit time
}
'std :: chrono :: time_point :: time_point(std :: chrono :: time_point &&)':无法将参数1从'std :: chrono :: steady_clock :: time_point'转换为'const _Duration&'DateRange在第19行
答案 0 :(得分:3)
基于范围的for循环(for ( range_declaration : range_expression ) loop_statement
)是this(在您的情况下)的语法糖:
{
auto && __range = range_expression ;
auto __begin = __range.begin();
auto __end = __range.end();
for ( ; __begin != __end; ++__begin)
{
range_declaration = *__begin;
loop_statement
}
}
没有涉及到我们的更详细信息(或在整个C ++版本中如何更改),这解释了为什么您的代码当前无法正常工作。您正在尝试这样做:
auto && __range = myDateRange;
-好的,我们的范围是DateRange
。很好。
auto __begin = __range.begin();
auto __end = __range.end();
因此__begin
和__end
现在是Time_type*
...这已经看起来很糟糕。
现在,循环将递增__begin
,但这是一个TimeType*
,它不指向数组。因此,取消引用递增的__begin
(在下一条语句中进行)将是未定义行为。请注意,从未operator++
中的range_expression
被调用。
无论您是否解决了编译器错误(以及DateRange(Time_type_t end)
中缺少初始化的问题),这种方法都行不通。您需要一个迭代器类,该类保留对DateRange
的引用。该迭代器由begin()
和end()
返回,并具有 self 和operator++()
和operator*()
(将返回适当的time_point
)
答案 1 :(得分:1)
从print_error()
返回的值最终必须等于从BenTen
返回的值一定数量的begin
。当前,当您返回指向不同对象的指针时,尚不确定是否可行。
您可能需要单独的end
类型。
++