GeezerVison is showing cpprefjp.github.io — std::optional::transform - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月19日 21時31分51秒 (JST)
rotarymars
が更新
履歴
編集
function template
<optional>
std:: optional:: transform (C++23)
// optional<T>版のオーバーロード
template < class F > constexpr auto transform ( F && f ) & ; // (1) C++23
template < class F > constexpr auto transform ( F && f ) && ; // (2) C++23
template < class F > constexpr auto transform ( F && f ) const & ; // (3) C++23
template < class F > constexpr auto transform ( F && f ) const && ; // (4) C++23
// optional<T&>版のオーバーロード (C++26)
template < class F >
constexpr optional < invoke_result_t < F , T &>>
transform ( F && f ) const ; // (5) C++26
概要
有効値を保持していれば、値に対してfを適用した結果をoptionalに格納して返す。
有効値を保持していなければ、std::nullopt を返す。
(1) : *thisが非const左辺値の場合
(2) : *thisが非const右辺値の場合
(3) : *thisがconst左辺値の場合
(4) : *thisがconst右辺値の場合
(5) : optional<T&>の場合
optional<T>では (1)~(4) が定義され、optional<T&>では (5) のみが定義される。
実際には複数オーバーロードが提供されるが、大まかには下記シグニチャのようにみなせる。
transformへは、引数リストに1個のT型をとりReturn型を返す関数や関数オブジェクトを与える。
template < class T >
class optional {
template < class Return >
std::optional < Return > transform ( function < Return ( T ) > func );
};
説明用のU型を次の通りとする:
適格要件
(1), (3) :
(2), (4) :
(5) :
効果
(1), (3) : *thisが有効値を保持するときは、invoke (std::forward <F>(f), value() )で直接非リスト初期化したoptional<U>オブジェクトを返す。有効値を保持しないときは、optional<U>()を返す。
(2), (4) : *thisが有効値を保持するときは、invoke (std::forward <F>(f), std::move (value() ))で直接非リスト初期化したoptional<U>オブジェクトを返す。有効値を保持しないときは、optional<U>()を返す。
(5) : *thisが有効値を保持するときは、invoke (std::forward <F>(f), *val)で直接非リスト初期化したoptional<U>オブジェクトを返す。有効値を保持しないときは、optional<U>()を返す。
備考
transformは、メソッドチェーンをサポートするモナド風(monadic)操作として導入された。
関数型プログラミングの文脈における Functor Map 操作に対応する。
例
出力
バージョン
言語
処理系
関連項目
参照