0

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àm operator().
    • 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ụ:
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ụ:
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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí