我一直在努力让我的代码使用std::variant
和std::visit
组合起来工作。现在,我已经将我的代码简化到只使用一个类型的variant,但编译器仍然抱怨没有匹配的调用visit。
#include <iostream>
#include <variant>
#include <vector>
#include <array>
class SomeClass {
public:
std::vector<int> foo(const std::string& s, const std::array<float, 3>& d){
return {};
}
};
struct Visitor{
public:
std::vector<int> operator() (SomeClass& c1, const std::string& s, const std::array<float, 3>& a) {
return c1.foo(s, a);
}
};
int main() {
std::variant<SomeClass> variants;
std::string s = "c++";
std::array<float, 3> a {1, 0, 0};
std::visit(Visitor{}, variants, s, a);
return 0;
}
我正在使用gcc 11.3
template<class... Ts> struct overload : Ts... { using Ts::operator()...; };
来进行lambda函数的重载。 然后:std::visit(overload { /*第一个lambda*/, /*第二个lambda*/}, variants)
; - ATK