3 분 소요

개요

C++11 부터 기존에 제공되던 함수자 타입 특성 클래스(unary_function, binary_function등), 바인더(bind1st(), bind2nd()등), 어뎁터와 부정자(mem_fun(), mem_fun_ref(), ptr_fun(), not1(), not2(), unary_negate(), binary_negate(), pointer_to_unary_function(), pointer_to_binary_function() 등)가 람다 표현식, function, bind(), mem_fn()등으로 대체되어 deprecate 되었습니다.

함수자 타입 특성 클래스

항목 내용
unary_function (~C++11) 단항 함수자
binary_function (~C++11) 이항 함수자

함수자

항목 내용
equal_to arg1 == arg2
not_equal_to arg1 != arg2
greater arg1 > arg2
less arg1 < arg2
greater_equal arg1 >= arg2
less_equal arg1 <= arg2
logical_and arg1 == arg2
logical_or arg1 || arg2
logical_not !arg
plus arg1 + arg2
minus arg1 - arg2
multiplies arg1 * arg2
divides arg1 / arg2
modulus arg1 % arg2
negate -arg
bit_and arg1 & arg2
bit_or arg1 | arg2
bit_xor arg1 ^ arg2
bit_not (C++14~) ~arg

부정자

항목 내용
unary_negate (~C++11) (작성중)
binary_negate (~C++11) (작성중)
not1() (~C++11) 단항 조건자리턴값을 부정합니다.
not2() (~C++11) 이항 조건자리턴값을 부정합니다.
not_fn()(C++17~) 인자(단항, 이항 제한이 없습니다.)로 전달한 함수자를 부정하는 함수자를 만듭니다.
1
2
3
// IsSame을 부정하는 함수자를 만듭니다.
auto IsDifferent{std::not_fn(IsSame)};
EXPECT_TRUE(IsDifferent(1, 1, 1) == false); // 인자가 여러개여도 됩니다. 

바인더

항목 내용
bind1st(op, x) (~C++11)
binder1st() (~C++11)
알고리즘엔 단항 함수로 전달되며, op(x, 요소)로 이항 함수를 호출합니다.
bind2nd(op, y) (~C++11)
binder2nd() (~C++11)
알고리즘엔 단항 함수로 전달되며, op(요소, y)로 이항 함수를 호출합니다.
bind() (C++11~) placeholders::_1(GCC의 경우 _1, _2, _3, … _29가 정의됨)와 같은 자리 표시자와 조합하여 특정 인자만을 사용하는 함수자를 생성합니다.
is_bind_expression (C++11~) bind()로 생성한 함수인지 검사합니다.
is_placeholder (C++11~) 자리 표시자를 사용했는지 검사합니다.
_1, _2, _3, _4 (C++11~) 자리 표시자 입니다.
bind_front() (C++20~) bind()처럼 함수자를 생성합니다. 인자들을 순서대로 배치하므로, 인자의 순서 변경이 없다면 간편하게 사용할 수 있습니다.
bind_back() (C++23~) (작성중)

함수 래퍼

항목 내용
function (C++11~) ()로 호출 가능한 함수자를 저장합니다.
bad_function_call (C++11~) function에서 ()로 호출할 대상이 없을 때 bad_function_call 예외를 방출합니다.
mem_fun() (~C++11)
mem_fun_t (~C++11)
mem_fun1_t (~C++11)
const_mem_fun_t (~C++11)
const_mem_fun1_t (~C++11)
알고리즘에서 f(x)의 호출을 x->f() 처럼 호출되게 합니다.
mem_fun_ref() (~C++11)
mem_fun_ref_t (~C++11)
mem_fun1_ref_t (~C++11)
const_mem_fun_ref_t (~C++11)
const_mem_fun1_ref_t (~C++11)
알고리즘에서 f(x)의 호출을 x.f() 처럼 호출되게 합니다.
ptr_fun() (~C++11) 바인더, 어뎁터, 부정자와 일반 함수가 호환될 수 있도록 일반 함수를 unary_function 이나 binary_function 개체로 만듭니다.
pointer_to_unary_function (~C++11) (작성중)
pointer_to_binary_function (~C++11) (작성중)
mem_fn() (C++11~) 인자가 있는 멤버 함수도 호출하는 함수자를 만들어 줍니다.
invoke(Func, params…) (C++17~) invoke()가 추가되어 일반 함수와 멤멤버 함수를 동일한 방식으로 호출할 수 있게 합니다. 일반 함수인 경우 Func(params...)를 호출하고, 멤버 함수인 경우 params[1].Func(params[2]...)을 호출합니다.
invoke_r() (C++20~) (작성중)
move_only_function (C++23~) (작성중)
copyable_function (C++26~) (작성중)
function_ref (C++26~) (작성중)

(C++11~) 참조 래퍼

항목 내용
reference_wrapper (C++11~) 복사 생성이나 복사 대입이 안되는 참조자를 래핑합니다.
ref() (C++11~)
cref() (C++11~)
reference_wrapper 개체를 생성합니다.
unwrap_reference (C++20~)
unwrap_ref_decay (C++20~)
(작성중)

(C++17~) Searcher

C++17 부터는 문자열 검색기가 추가되어 search()함수자로 사용할 수 있습니다.

항목 내용
default_searcher (C++17~) 기본 검색기 입니다.
boyer_moore_searcher (C++17~) Boyer-Moore 문자열 검색 알고리즘을 사용하는 검색기 입니다.
boyer_moore_horspool_searcher (C++17~) Boyer-Moore-Horspool 문자열 검색 알고리즘을 사용하는 검색기 입니다.

다음은 data문자열에서 sub를 찾는 예입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
std::string data{"Hello world."};
std::string sub{"wo"};

auto itr = std::search(
    data.begin(),
    data.end(),
    std::default_searcher(
        sub.begin(),
        sub.end()
    )
);

// data에서 sub를 찾았다면 오프셋을 구해봅니다.
if (itr != data.end()) {
    EXPECT_TRUE(std::distance(data.begin(), itr) == 6);
}

(C++20~) Identity

항목 내용
identity (C++20~) (작성중)

태그:

카테고리:

업데이트:

댓글남기기