Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
console::Coroutine< Ret()> Class Template Reference

无参数协程的特化,可用作输入迭代器。 More...

#include <coroutine.h>

Public Types

using value_type = Ret
 值类型。
using difference_type = ptrdiff_t
 差值类型。
using pointer = value_type *
 指针类型。
using reference = value_type
 引用类型 (事实上是值类型)。
using iterator_category = std::input_iterator_tag
 迭代器类别 (输入迭代器)。

Public Member Functions

template<class F>
 Coroutine (F f)
 从可调用对象构造协程迭代器。
Ret operator() ()
 直接调用协程,取下一个产出值。
value_type operator* ()
 解引用操作符,返回当前缓存值。
Coroutine & operator++ ()
 前置自增,推进协程。
Coroutine operator++ (int)
 后置自增,推进协程。
bool operator== (const Coroutine &)
 相等比较。
bool operator!= (const Coroutine &)
 不相等比较。
Coroutine begin ()
 返回自身作为范围 for 的起始迭代器。
Coroutine end ()
 返回自身作为范围 for 的结束哨兵迭代器。

Private Attributes

std::shared_ptr< std::function< Ret()> > coro
 底层协程函数 (由宏生成的 lambda)。
std::shared_ptr< Ret > ptr
 缓存当前产出值;协程结束后为 nullptr。

Detailed Description

template<class Ret>
class console::Coroutine< Ret()>

无参数协程的特化,可用作输入迭代器。

返回引用无参数协程的特化,可用作输入迭代器。

每次调用 operator() 获取下一个产出值。该特化支持范围 for 循环 (通过 begin() 和 end()),也提供迭代器语义。 当协程结束 (抛出 StopIteration)后, 迭代被视为到达末尾。

Template Parameters
Ret产出值的类型。

每次调用 operator() 获取下一个产出引用。该特化支持范围 for 循环 (通过 begin() 和 end()),也提供迭代器语义。 当协程结束 (抛出 StopIteration)后, 迭代被视为到达末尾。

Template Parameters
Ret产出值的类型。

Member Typedef Documentation

◆ difference_type

template<class Ret>
using console::Coroutine< Ret()>::difference_type = ptrdiff_t

差值类型。

◆ iterator_category

template<class Ret>
using console::Coroutine< Ret()>::iterator_category = std::input_iterator_tag

迭代器类别 (输入迭代器)。

◆ pointer

template<class Ret>
using console::Coroutine< Ret()>::pointer = value_type *

指针类型。

◆ reference

template<class Ret>
using console::Coroutine< Ret()>::reference = value_type

引用类型 (事实上是值类型)。

◆ value_type

template<class Ret>
using console::Coroutine< Ret()>::value_type = Ret

值类型。

Constructor & Destructor Documentation

◆ Coroutine()

template<class Ret>
template<class F>
console::Coroutine< Ret()>::Coroutine ( F f)
inline

从可调用对象构造协程迭代器。

Parameters
f协程函数 (如宏组合生成的 lambda)。

Member Function Documentation

◆ begin()

template<class Ret>
Coroutine console::Coroutine< Ret()>::begin ( )
inline

返回自身作为范围 for 的起始迭代器。

◆ end()

template<class Ret>
Coroutine console::Coroutine< Ret()>::end ( )
inline

返回自身作为范围 for 的结束哨兵迭代器。

◆ operator!=()

template<class Ret>
bool console::Coroutine< Ret()>::operator!= ( const Coroutine< Ret()> & )
inline

不相等比较。

Returns
true 当协程尚未结束。

◆ operator()()

template<class Ret>
Ret console::Coroutine< Ret()>::operator() ( )
inline

直接调用协程,取下一个产出值。

Returns
下一个产出值。
Exceptions
console::StopIteration当协程已结束 (无更多产出)。

◆ operator*()

template<class Ret>
value_type console::Coroutine< Ret()>::operator* ( )
inline

解引用操作符,返回当前缓存值。

若尚未取过值,则先推进协程一次。

Returns
当前产出的值。
Exceptions
console::StopIteration若协程刚刚结束且无产出。

◆ operator++() [1/2]

template<class Ret>
Coroutine & console::Coroutine< Ret()>::operator++ ( )
inline

前置自增,推进协程。

Returns
自身引用。

◆ operator++() [2/2]

template<class Ret>
Coroutine console::Coroutine< Ret()>::operator++ ( int )
inline

后置自增,推进协程。

Returns
旧的 (推进前的) 副本。

◆ operator==()

template<class Ret>
bool console::Coroutine< Ret()>::operator== ( const Coroutine< Ret()> & )
inline

相等比较。

若尚未到达末尾,先推进协程再判断。

Returns
true 当协程已结束 (到达末尾)。

Member Data Documentation

◆ coro

template<class Ret>
std::shared_ptr<std::function<Ret()> > console::Coroutine< Ret()>::coro
private

底层协程函数 (由宏生成的 lambda)。

◆ ptr

template<class Ret>
std::shared_ptr<Ret> console::Coroutine< Ret()>::ptr
private

缓存当前产出值;协程结束后为 nullptr。


The documentation for this class was generated from the following file: