callable类型 是什么?

在 C++ 中,callable 类型(可调用类型)是指可以像函数一样被调用的对象

C++ 中有多种不同的可调用对象类型,它们可以通过函数调用运算符 () 被调用。

常见的 callable 类型包括:

  1. 普通函数(普通函数、静态函数、成员函数)
  2. 函数指针
  3. 仿函数(函数对象)
  4. Lambda 表达式
  5. std::function 类型

1. 普通函数

普通的全局函数或静态成员函数是最常见的 callable 类型,它们可以直接通过 () 被调用。

#include <iostream>
void my_function() {
    std::cout << "Hello from a regular function!" << std::endl;
}

int main() {
    my_function();  // 直接调用函数
}

2. 函数指针

函数指针是指向函数的指针,也是一种可调用对象。

#include <iostream>
void my_function() {
    std::cout << "Hello from a function pointer!" << std::endl;
}

int main() {
    void (*func_ptr)() = my_function;  // 定义函数指针
    func_ptr();  // 通过函数指针调用函数
}

3. 仿函数(函数对象)

仿函数是通过重载 operator() 运算符的类或结构体实例。这使得类的实例可以像函数一样被调用。

#include <iostream>

struct MyFunctor {
    void operator()() const {
        std::cout << "Hello from a functor!" << std::endl;
    }
};

int main() {
    MyFunctor functor;
    functor();  // 调用仿函数
}

4. Lambda 表达式

Lambda 表达式是 C++11 引入的匿名函数,可以捕获外部变量。它们也是一种 callable 类型。

#include <iostream>

int main() {
    auto lambda = []() {
        std::cout << "Hello from a lambda!" << std::endl;
    };
    lambda();  // 调用 lambda
}

5. std::function

std::function 是一个通用的函数包装器,可以存储任何可调用对象,包括函数、lambda 表达式、仿函数等。

#include <iostream>
#include <functional>

void my_function() {
    std::cout << "Hello from std::function!" << std::endl;
}

int main() {
    std::function<void()> func = my_function;
    func();  // 通过 std::function 调用函数
}

总结:

在 C++ 中,callable 类型泛指那些可以通过 () 操作符调用的对象,主要包括:

  1. 普通函数
  2. 函数指针
  3. 仿函数(函数对象)
  4. Lambda 表达式
  5. std::function

这些不同的 callable 类型使得 C++ 拥有强大的函数抽象和灵活的调用机制。

posted @ 2024-09-29 18:17  牛马chen  阅读(9)  评论(0编辑  收藏  举报