最終更新日時(UTC):
が更新

履歴 編集

function template
<memory>

std::out_ptr(C++23)

namespace std {
  template<class Pointer = void, class Smart, class... Args>
  auto out_ptr(Smart& s, Args&&... args);
}

概要

2重ポインタT**引数経由で新規確保リソースへのポインタを返すレガシーC関数に対して、出力されたポインタ値をスマートポインタsに格納するアダプタout_ptr_tを返すヘルパ関数。

C++標準スマートポインタstd::shared_ptrstd::unique_ptrを始め、互換インタフェースをもつ任意のスマートポインタ型Smartを取り扱える。

説明用のP型を次のように定義する :

  • is_void_v<Pointer>falseならばPointer
  • そうでなければ、Smart::pointerが有効な型名であればSmart::pointer
  • そうでなければ、Smart::element_type*が有効な型名であればSmart::element_type*
  • そうでなければ、pointer_traits<Smart>::element_type*

戻り値

out_ptr_t<Smart, P, Args&&...>(s, std::forward<Args>(args)...)

P1132R8引用

// Legacy C APIs
error_num c_api_create_handle(int seed_value, int** p_handle);
void c_api_delete_handle(int* handle);

// C++ program
#include <memory>

struct resource_deleter {
  void operator()(int* handle) {
    c_api_delete_handle(handle);
  }
};

int main() {
  std::unique_ptr<int, resource_deleter> resource(nullptr);
  error_num err = c_api_create_handle(
    24, std::out_ptr(resource)
  );
  if (err == C_API_ERROR_CONDITION) {
    // handle errors
  }
  // resource.get() the out-value from the C API function
}

バージョン

言語

  • C++23

処理系

関連項目

参照