CodeNebula
C++98stlbeginner

std::pointer_to_unary_function

C++98 · The Foundation · Compiler flag: -std=c++98

Explanation

Converts a unary function pointer to a function object (deprecated in C++11).

Real-World Scenario

Adapt a function for use in an algorithm.

Quick Snippet

snippet.cpp
std::pointer_to_unary_function<int, int> func_ptr(myFunc);

Full Example

pointer_to_unary_function.cpp
// CodeNebula - C++98 Example: pointer_to_unary_function / ptr_fun (unary)
// Compile: g++ -std=c++98 -Wall -Wextra -o example pointer_to_unary_function.cpp

#include <iostream>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <cctype>

bool is_upper(char c) {
    return std::isupper(static_cast<unsigned char>(c)) != 0;
}

int absolute(int x) {
    return std::abs(x);
}

int main() {
    // ptr_fun wraps a plain function pointer into a functor
    // This allows it to work with not1, bind1st, bind2nd

    // Count uppercase characters using ptr_fun
    char str[] = "Hello World ABC";
    int len = 15;
    int upper_count = std::count_if(str, str + len,
                                    std::ptr_fun(is_upper));
    std::cout << "Uppercase chars: " << upper_count << std::endl;

    // Use not1 with ptr_fun to count non-uppercase
    int non_upper = std::count_if(str, str + len,
                                  std::not1(std::ptr_fun(is_upper)));
    std::cout << "Non-uppercase chars: " << non_upper << std::endl;

    // Transform with ptr_fun(absolute)
    int arr[] = {-3, 5, -7, 2, -1};
    int result[5];
    std::transform(arr, arr + 5, result, std::ptr_fun(absolute));

    std::cout << "Absolute values: ";
    for (int i = 0; i < 5; ++i) std::cout << result[i] << " ";
    std::cout << std::endl;

    return 0;
}

// Expected output:
// Uppercase chars: 6
// Non-uppercase chars: 9
// Absolute values: 3 5 7 2 1
Run command
g++ -std=c++98 -Wall -Wextra -o example pointer_to_unary_function.cpp