模板参数推导失败,尝试 std::variant

Template argument deduction failed, trying with std::variant

我有以下程序与我的问题类似。我需要从 getClass 之类的方法中获取特定的 class,然后传递对象并调用类似的定义方法。我不能使用多态性。

#include <variant>
#include <optional>
#include <iostream>
using namespace std;
    
class A{
    public:
    void foo() const {
        std::cout << "A";
    }
};


class B{
    public:
    void foo() const {
        std::cout << "B";
    }
};


class C {
    public:
    void foo() const {
        std::cout << "C";
    }
};

using Object = std::variant<A,B,C>;


std::optional<Object> getClass(int nr)
{
    if (nr == 0)
        return A{};
    else if (nr == 1)
        return B{};
    else if(nr == 2)
        return C{};
    return std::nullopt;
}

void f(const Object& ob)
{
    //how to call foo function ???
}

int main()
{
    const auto& obj = getClass(2);
    
    if (obj.has_value())
        f(obj.value());
}

您可以使用std::visit

void f(const Object& ob)
{
    std::visit([](const auto& o){ o.foo();},ob);
}