Callable
Trong C++, Callable là một khái niệm rộng chỉ bất kỳ thứ gì có thể được gọi giống như một hàm.
Dưới đây là các loại Callable phổ biến trong c++
- Hàm thông thường (Regular function): Đây là loại Callable cơ bản nhất, được định nghĩa bằng
int
,void
, ... theo sau là tên hàm, danh sách tham số và thân hàm. Ví dụ:
int add(int a, int b) { return a + b;}
- Con trỏ hàm (Function pointer): lưu trữ địa chỉ bộ nhớ của một hàm. Được sử dụng để gọi hàm mà con trỏ hàm đang trỏ tới. Ví dụ:
int (*func_ptr)(int, int) = add;
int sum = func_ptr(3,5);
- Đối tượng hàm (Function object hay Functors)
- Đây là đối tượng của 1 lớp (
class
,struct
) mà lớp đó định nghĩa toán tử gọi hàmoperator()
. - Toán tử
operator()
cho phép ta gọi đối tượng của lớp đó giống như một hàm. - Đối tượng hàm có thể lưu trữ trạng thái (dữ liệu thành viên), điều mà hàm thông thường hay con trỏ hàm không thể làm được. Ví dụ:
- Đây là đối tượng của 1 lớp (
struct Multiplier{
int factor; // lưu trữ dữ liệu thành viên
Multiplier(int _factor) : factor(_factor) {}
int operator()(int x) const {
return x * factor;
}
};
Multiplier mul(5);
int result = mul(10);
- Lambda Expressions (Biểu Thức Lambda)
- Là một cách ngắn gọn để định nghĩa các đối tượng hàm ẩn danh (không tên).
- Thường được sử dụng để truyền các đoạn mã nhỏ vào các hàm khác. Ví dụ:
auto square = [](int x) {return x * x;}
int reuslt = square(7);
- Con trỏ đến hàm thành viên (Pointers to Member Functions)
- Là trỏ tới một phương thức của một lớp (
class
). - Để gọi một phương thức thông qua con trỏ đến thành viên hàm, bạn cần có một đối tượng cụ thể của lớp đó. Ví dụ:
- Là trỏ tới một phương thức của một lớp (
struct MyClass {
int value;
MyClass(int v) : value(v) {}
int getValue() const { return value; }
};
int (MyClass::*get_value_ptr)() const = &MyClass::getValue;
MyClass obj(42);
int val = (obj.*get_value_ptr)(); // Gọi phương thức thông qua con trỏ đến thành viên hàm
All rights reserved