std::visit 是对 variant 进行类型分发的函数调用,需提供能处理 variant 所有类型的可调用对象;C++17 需显式重载 operator() 或多个 lambda,C++20 支持泛型 lambda。
std::visit 本质是“对 variant 做类型分发的函数调用”
它不是访问器,也不是 getter,而是让编译器根据 std::variant 当前持有的实际类型,自动选择并调用你提供的对应处理逻辑。关键点在于:它要求你提供一个可调用对象(lambda、函数对象、普通函数),且该对象必须能接受 std::variant 中**每一种可能的类型**作为参数——否则编译失败。
常见错误现象:error: no matching function for call to 'visit',通常是因为 lambda 缺少某个类型的重载,或用了 auto 参数但没启用 C++20 的泛型 lambda(C++17 中 auto 参数在 visit 里不被允许)。
实操建议: