测试λ 函数的一种方法:通过全局 λ 函数表,保存所有λ 函数
下面的方式,把任意的局部代码包装在λ 函数里,就地调用,同时把λ 函数保存到全局表,在外部访问。
#include <iostream>
#include <vector>
#include <functional>
#include <map>
#include <any>
// 全局的 map,用于保存 foo 函数内部的 lambda 函数
std::map<std::string, std::any> lambdaMap;
// 定义宏,用于在 foo 函数中插入 lambda 测试代码
#define LAMBDA_TEST_BEGIN(name, params) \
auto lambda_##name = [&](params) {
#define LAMBDA_TEST_END(name, args) \
}; \
lambdaMap[#name] = lambda_##name;
void foo() {
// 容器
std::vector<int> container = {1, 2, 3, 4, 5};
// 在原始 while 循环的前后分别插入宏定义
LAMBDA_TEST_BEGIN(while, std::vector<int>& vec)
// 只有当容器非空时才执行逻辑
while (!vec.empty()) {
// 在容器非空时的逻辑
std::cout << "容器不为空,大小为 " << vec.size() << std::endl;
// 在这里可以添加更多逻辑
// ...
vec.pop_back(); // 为了避免无限循环,这里简单地从容器中删除最后一个元素
}
// 容器为空时的逻辑
std::cout << "容器为空" << std::endl;
LAMBDA_TEST_END(while, container)
}
int main() {
foo(); // 调用 foo 函数
// 在 main 函数中测试 lambda 函数的逻辑
std::vector<int> emptyContainer;
std::vector<int> nonEmptyContainer = {1, 2, 3};
// 测试容器为空时的逻辑
std::cout << "测试容器为空时的逻辑:" << std::endl;
std::any_cast<std::function<void(std::vector<int>&)>>(lambdaMap["while"])(emptyContainer);
std::cout << std::endl;
// 测试容器非空时的逻辑
std::cout << "测试容器非空时的逻辑:" << std::endl;
std::any_cast<std::function<void(std::vector<int>&)>>(lambdaMap["while"])(nonEmptyContainer);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix