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?
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);
}
Tôi là một lập trình viên xuất sắc, rất giỏi!