## Class template coroutineN

hamigaki::coroutines::coroutineN —

## Synopsis

    template<typename R, typename T1, typename T2, ..., typename TN>
    class coroutineN {
    public:
      // types
      typedef selfN<R, T1, T2, ..., TN> self;

      // construct/copy/destruct
      coroutineN();
      coroutineN(coroutineN&);
      template<typename Functor> coroutineN(const Functor&, std::ptrdiff_t = -1);

      // queries
      bool exited() const;
      bool empty() const;

      // modifiers
      void exit();

      // invocations
      R operator()(T1, T2, ..., TN) const;
      boost::optional<R> operator()(std::nothrow_t, T1, T2, ..., TN) const;
    };

## Description

### `coroutineN` construct/copy/destruct

1.     coroutineN();

   Effects: | ファンクタを保持していない空のコルーチンを生成する。
   Postconditions: | `empty()`

2.     coroutineN(coroutineN& x);

   Effects: | `x`の保持するコルーチンの所有権を引き取る。
   Postconditions: | `x.empty()`

3.     template<typename Functor>
         coroutineN(const Functor& f, std::ptrdiff_t stack_size = -1);

   Effects: | スタックサイズが`stack_size`のコルーチンを生成する。ファンクタ`f`のコピーがコルーチンのエントリポイントに設定される。
   Postconditions: | `!empty()`

### `coroutineN` queries

1.     bool exited() const;

   Returns: | コルーチンの保持するファンクタが終了していれば、`true`

2.     bool empty() const;

   Returns: | コルーチンがコンテキストを保持していない場合、`true`

### `coroutineN` modifiers

1.     void exit();

   Effects: | コルーチンの実行を中断し、終了させる。
   Postconditions: | `exited()`

### `coroutineN` invocations

1.     R operator()(T1 a1, T2 a2, ..., TN aN) const;

   Effects: | コルーチンの実行を再開し、その結果を返す。
   Returns: | コルーチンの戻り値
   Throws: | コルーチンが`exit()`により終了した場合には、coroutine_exitedを送出する。 捕捉されない例外によりコルーチンが異常終了した場合は、その例外の型情報を保持するabnormal_exitを送出する。

2.     boost::optional<R> operator()(std::nothrow_t, T1 a1, T2 a2, ..., TN aN) const;

   Effects: | コルーチンの実行を再開し、その結果を返す。
   Returns: | コルーチンが終了した、あるいは未捕捉例外により異常終了して、戻り値がない場合は、`boost::optional<R>()`。それ以外の場合は、コルーチンの戻り値。
   Throws: | 引数や戻り値のコピーコンストラクタが例外を送出する場合を除いて、いかなる例外も送出しない。

| 製作著作 © 2006-2008 Takeshi Mouri