functional_ptr_fun
functional_ptr_fun (함수 포인터를 함수 객체로 변환)
이 페이지는 C++ 표준 라이브러리의 std::ptr_fun 함수 템플릿에 대해 다뤄요. ptr_fun은 일반 함수 포인터를 std::pointer_to_unary_function 또는 std::pointer_to_binary_function 형태의 함수 객체로 감싸서, 알고리즘과 같은 함수자 어댑터에서 사용할 수 있게 해줘요. C++11부터 std::function과 std::ref로 대체되어 폐기되었고, C++17에서 완전히 제거되었어요.
출처: cppreference
본문
<functional> 헤더에 정의됨 |
||
|---|---|---|
| template < class Arg , class Result > std :: pointer_to_unary_function < Arg , Result > ptr_fun ( Result ( * f )( Arg ) ); | (1) | (C++11에서 폐기됨) (C++17에서 제거됨) |
| template < class Arg1 , class Arg2 , class Result > std :: pointer_to_binary_function < Arg1 , Arg2 , Result > ptr_fun ( Result ( * f )( Arg1 , Arg2 ) ); | (2) | (C++11에서 폐기됨) (C++17에서 제거됨) |
이 함수는 템플릿 인자에서 대상 타입을 추론하여 함수 래퍼 객체(std :: pointer_to_unary_function 또는 std :: pointer_to_binary_function)를 생성해요.
이 함수와 관련 타입들은 C++11부터 더 일반적인 std::function과 std::ref를 위해 폐기되었어요. 두 기능 모두 일반 함수에서 호출 가능한 어댑터 호환 함수 객체를 만들어 주거든요.
매개변수
| f | - | 래퍼를 생성할 함수에 대한 포인터 |
반환값
f를 감싸는 함수 객체를 반환해요.
예외
구현 정의 예외를 던질 수 있어요.
예제
#include <algorithm>
#include <functional>
#include <iostream>
#include <string_view>
constexpr bool is_vowel(char c)
{
return std::string_view{"aeoiuAEIOU"}.find(c) != std::string_view::npos;
}
int main()
{
std::string_view s = "Hello, world!";
std::ranges::copy_if(s, std::ostreambuf_iterator<char>(std::cout),
std::not1(std::ptr_fun(is_vowel)));
#if 0
// C++11 alternatives:
std::not1(std::cref(is_vowel)));
std::not1(std::function<bool(char)>(is_vowel)));
[](char c) { return !is_vowel(c); });
// C++17 alternatives:
std::not_fn(is_vowel));
#endif
}
출력:
Hll, wrld!
같이 보기
| function (C++11) | 복사 생성 가능한 모든 호출 가능 객체의 복사 가능한 래퍼 (클래스 템플릿) [edit] |
|---|---|
| move_only_function (C++23) | 주어진 호출 시그니처에서 한정사를 지원하는 모든 호출 가능 객체의 이동 전용 래퍼 (클래스 템플릿) [edit] |
| invoke invoke_r (C++17) (C++23) | 주어진 인자로 임의의 Callable 객체를 호출하고 반환 타입을 지정할 수 있게 해줌 (C++23부터) (함수 템플릿) [edit] |
| not_fn (C++17) | 보유한 함수 객체의 결과의 보수를 반환하는 함수 객체를 생성함 (함수 템플릿) [edit] |