如何为arg实现具有两种类型之一的类

时间:2019-03-05 06:16:36

标签: c++

如果我有一个c ++类,例如:

class Student
{ 
    public: 

    string name;
    int assigned_number;      
};

并且我想在每个实例中使用名称或数字,但不能同时使用两者,是否有一种方法可以使它成为Or类型,而只需要其中之一?

2 个答案:

答案 0 :(得分:6)

如果 您使用的是 C ++ 17或更高版本,则可以使用<variant>中的std::variant

#include <iostream>
#include <variant> // For 'std::variant'

class Student
{
public:
    std::variant<std::string, int> name_and_id;
};

int main() {
    Student stud; // Create an instance of student

    // Pass a string and print to the console...
    stud.name_and_id = "Hello world!";
    std::cout << std::get<std::string>(stud.name_and_id) << std::endl;

    // Pass an integer and print to the console...
    stud.name_and_id = 20;
    std::cout << std::get<int>(stud.name_and_id) << std::endl;
}

std::variant是C ++ 17的新增功能,旨在替换C中的并集,并且在出现错误的情况下会出现异常...

答案 1 :(得分:-1)

您可以使用联合。

#include <string>

class Student
{
    // Access specifier 
public:
    Student()
    {

    }
    // Data Members
    union
    {
        std::string name;
        int assigned_number;
    };
    ~Student()
    {

    }
};

int main()
{
    Student test;
    test.assigned_number = 10;
    test.name = "10";
    return 0;
}