> 백엔드 개발 > C++ > 본문

C++ 함수 포인터 작동: 일반적인 프로그래밍 문제 해결

WBOY
풀어 주다: 2024-04-29 17:33:01
원래의
889명이 탐색했습니다.

함수 포인터는 다음을 포함하여 C++의 프로그래밍 문제를 해결하는 강력한 방법을 제공합니다. 비교 함수: 함수 포인터를 사용하여 객체 정렬을 용이하게 하는 사용자 정의 비교기를 구현합니다. 이벤트 처리: 이벤트를 트리거하는 함수 포인터를 등록하여 이벤트 처리 시스템을 만듭니다. 콜백 함수: 제어권을 다른 함수로 넘겼다가 적절한 시점에 제어권을 복원하여 콜백 함수를 구현합니다.

C++ 函数指针实战:解决常见编程难题

C++ 함수 포인터 연습: 일반적인 프로그래밍 문제 해결

함수 포인터는 C++의 강력한 기능으로, 함수를 매개변수로 전달하거나 저장할 수 있습니다. 함수 포인터의 기본 개념과 실제 적용을 이해하면 다양한 프로그래밍 문제를 효과적으로 해결할 수 있습니다.

기본 개념

함수 포인터는 함수에 대한 포인터입니다. 해당 유형은 반환 값과 매개변수 유형이 포인터 선언에 지정된 함수에 대한 포인터입니다. 예:

typedef int (*FuncPtr)(int, int);
로그인 후 복사

이것은 반환 유형이 int이고 매개변수가 int 및 int인 함수에 대한 포인터를 선언합니다.

실용 사례

1. 비교 함수**

함수 포인터를 사용하여 두 개체를 비교할 수 있습니다. 다음 코드는 함수 포인터를 사용하여 사용자 정의 비교기를 구현하는 방법을 보여줍니다.

#include <algorithm>

struct Person {
    std::string name;
    int age;
};

// 比较器函数
bool compare_by_name(const Person& lhs, const Person& rhs) {
    return lhs.name < rhs.name;
}

bool compare_by_age(const Person& lhs, const Person& rhs) {
    return lhs.age < rhs.age;
}

int main() {
    std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Carol", 32}};

    // 使用函数指针对人进行排序
    std::sort(people.begin(), people.end(), compare_by_name);
    for (auto& person : people) {
        std::cout << person.name << std::endl;
    }
    std::cout << std::endl;

    // 使用不同的函数指针对人进行排序
    std::sort(people.begin(), people.end(), compare_by_age);
    for (auto& person : people) {
        std::cout << person.name << std::endl;
    }
    return 0;
}
로그인 후 복사

출력:

Alice
Bob
Carol

Bob
Alice
Carol
로그인 후 복사

2. 이벤트 처리**

함수 포인터는 이벤트 처리 시스템을 만드는 데 사용할 수 있습니다. 다음 예에서는 함수 포인터를 사용하여 이벤트를 등록하고 트리거하는 방법을 보여줍니다.

#include <map>
#include <functional>

class EventManager {
public:
    // 注册事件
    template<typename Function>
    void Register(const std::string& event, Function callback) {
        callbacks[event].push_back(callback);
    }

    // 触发事件
    void Trigger(const std::string& event) {
        for (auto& callback : callbacks[event]) {
            callback();
        }
    }

private:
    std::map<std::string, std::vector<std::function<void()>>> callbacks;
};

int main() {
    EventManager manager;

    // 注册按钮点击事件
    manager.Register("button_click", []() { std::cout << "Button clicked!" << std::endl; });

    // 模拟按钮点击
    manager.Trigger("button_click");

    return 0;
}
로그인 후 복사

출력:

Button clicked!
로그인 후 복사

3. 콜백 함수**

함수 포인터를 사용하여 콜백 함수를 구현하여 하나의 함수가 제어권을 넘겨줄 수 있습니다. 또 다른 기능을 수행하고 때가 되면 제어권을 다시 얻습니다. 다음 예에서는 함수 포인터를 사용하여 콜백 함수를 생성하는 방법을 보여줍니다.

#include <thread>

void Callback(int num) {
    std::cout << "Callback function called with argument: " << num << std::endl;
}

int main() {
    std::thread thread(Callback, 10);
    thread.join();
    return 0;
}
로그인 후 복사

Output:

Callback function called with argument: 10
로그인 후 복사

위 내용은 C++ 함수 포인터 작동: 일반적인 프로그래밍 문제 해결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿