## Class template shared_coroutineN

hamigaki::coroutines::shared_coroutineN —

## Synopsis

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

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

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

      // modifiers
      void exit();

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

## Description

### `shared_coroutineN` construct/copy/destruct

1.     shared_coroutineN();

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

2.     shared_coroutineN(const shared_coroutineN& x);

   Effects: | `x`とコルーチンを共有する。
   Postconditions: | `!empty()`

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

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

### `shared_coroutineN` queries

1.     bool exited() const;

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

2.     bool empty() const;

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

### `shared_coroutineN` modifiers

1.     void exit();

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

### `shared_coroutineN` invocations

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

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

| 製作著作 © 2006, 2007 Takeshi Mouri