我有以下與我的問題類似的程式。我需要從類似的方法中獲取特定的類,getClass然后傳遞物件并呼叫類似的定義方法。我不能使用多型。
#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());
}
uj5u.com熱心網友回復:
您可以使用 std::visit
void f(const Object& ob)
{
std::visit([](const auto& o){ o.foo();},ob);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/312600.html
下一篇:如何使用模板使不必要的長代碼緊湊
