使用类作为数据类型时,如何在std :: variant中存储值?

问题描述

我创建了一个类,并将该类用作std :: variant的数据类型。但是当我存储值时,由于显示了一些错误,我无法访问它。

#include <variant>
#include <string>
#include <iostream>

class Random
{
    public:
        int rand_number;
        float rand_dec;
};

int main(){
    Random random;
    random.rand_number=1;
    random.rand_dec=2.1;
    
    std::variant<Random,std::string> input{ "Hello" };
    
    auto PrintVisitor = [](const auto& t) { std::cout << t << "\n"; };
    std::visit(PrintVisitor,input);}

所以,我想知道使用类时如何访问该值,因为使用认数据类型没有问题吗?

错误太大,因此我要发布重要的部分

 19 52  C:\Users\Khusi\Documents\CPP\test2.cpp  [Error] no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'const Random')

解决方法

在访问变量input时,该变量仅接受两种类型:类Randomstd::string,函数PrintVisitor对变量的每个成员执行一个操作: std::cout << t << "\n";。因此,类std :: string具有重载输出运算符,但您的类没有。您需要实现它。

有一个重载输出运算符的示例:https://docs.microsoft.com/en-us/cpp/standard-library/overloading-the-output-operator-for-your-own-classes?view=vs-2019