C++·

std::function的使用

Hugh

Hugh

29 0

在 C++ 中,std::function<void()> on_press_down_; 这行代码涉及到标准库中的 std::function 类型,以下是对它的详细语法解释:

1. std::function 简介

std::function 是 C++ 标准库 <functional> 头文件中定义的一个类模板,它是一个通用的函数包装器。它可以存储、复制和调用任何可调用对象,包括普通函数、Lambda 表达式、函数指针以及重载了 operator() 的类对象(函数对象,也叫仿函数)。通过 std::function ,可以实现统一的方式来处理不同类型的可调用实体,增强了代码的灵活性和可扩展性。

2. 模板参数 void()

std::function 是一个类模板,尖括号 <> 内的 void() 是它的模板参数,用于指定被包装的可调用对象的类型(签名)。这个签名由两部分组成:

  • 返回值类型​:这里是 void ,表示被包装的可调用对象执行后不返回任何值。
  • 参数列表​:这里的空括号 () 表示被包装的可调用对象不接受任何参数。

也就是说,std::function<void()> 表示一个包装器类型,它可以存储任何 “不接受参数且返回值为 void ” 的可调用对象。

3. 变量声明 on_press_down_

on_press_down_ 是一个变量名,通过 std::function<void()> 声明了一个名为 on_press_down_ 的变量,它的类型是 std::function<void()> 。目前这个变量没有被初始化,它可以在后续代码中被赋值为符合 void() 签名的可调用对象。

4. 示例用法

下面展示几种给 on_press_down_ 赋值并调用的常见方式:

普通函数

#include <functional>
#include <iostream>

void printHello() {
    std::cout << "Hello" << std::endl;
}

int main() {
    std::function<void()> on_press_down_ = printHello;
    on_press_down_(); // 调用,会输出 "Hello"
    return 0;
}

Lambda 表达式

#include <functional>
#include <iostream>

int main() {
    std::function<void()> on_press_down_ = []() {
        std::cout << "This is a lambda expression." << std::endl;
    };
    on_press_down_(); // 调用,会输出 "This is a lambda expression."
    return 0;
}

函数对象(仿函数)

cpp

#include <functional>
#include <iostream>

class PressDownHandler {
public:
    void operator()() {
        std::cout << "Function object is called." << std::endl;
    }
};

int main() {
    std::function<void()> on_press_down_ = PressDownHandler();
    on_press_down_(); // 调用,会输出 "Function object is called."
    return 0;
}

通过 std::function ,在实际编程中,比如在事件处理系统里,可以方便地将不同类型的处理逻辑以统一的方式存储和调用,例如当某个按钮被按下时,执行对应的处理函数,on_press_down_ 就可以用来存储这个处理逻辑。

相关文章

优先推荐同专题、同标签和同作者内容,补足热门文章。

评论 0

登录 后参与评论

评论

成为第一个评论的人