cuốn sách gpt4 ai đã làm

C++ Lambdas: hàm trả về hàm trả về hàm ..?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 08:23:52 28 4
mua khóa gpt4 Nike

Có mẫu nào trong C++ cho phép bạn trả về một hàm trả về chính hàm đó không. Ví dụ

std::function<...> func = ...;
do
{
func = func();
}
trong khi (func);

Trong C, tôi nghĩ bạn có thể làm điều đó bằng cách sử dụng chuyển đổi void* thành void* (*)(). vì vậy bạn sẽ có

typedef void* (*MyFunc)(void);
Chức năng MyFunc = ...
do
{
func = (MyFunc)func();
}
trong khi(func);

Điều này có thể đạt được bằng cách sử dụng lambda?

câu trả lời hay nhất

Ví dụ C của bạn không hợp lệ ISO C. Nó có thể được thực hiện bằng C++, chỉ sử dụng các hàm hợp lệ trong C:

typedef void (*func_type)();
typedef func_type (*func_func_type)();

int tôi = 5;
func_type f() { return --i ? (func_type)f : 0;

int main()
{
func_func_type func = f;
do
{
func = (func_func_type)func();
}
trong khi(func);
}

Bạn không thể ghi đè nó để sử dụng lambda trực tiếp vì lambda không thể tự tham chiếu (như f cái đó), nhưng bạn có thể chuyển đổi lambda thành một con trỏ hàm, giữ kiểu con trỏ từ hàm này trỏ sang hàm khác và lưu nó vào std::chức năng , như hình dưới đây:

#include 

typedef void (*func_type)();
typedef func_type (*func_func_type)();

int tôi = 5;
func_func_type f = (func_func_type)[]{ return --i ? (func_type)f : nullptr };

int main()
{
std::function func = f;
do
{
func = (func_func_type)func();
}
trong khi(func);
}

Giới thiệu về C++ Lambdas: hàm trả về hàm trả về hàm ..? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/31894112/

28 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress