C ++是否支持多类型变量?

时间:2017-09-16 21:19:14

标签: c++

C ++是否支持复合数据类型?在下面的Python示例中,var是复合数据类型。

class A(object):
    def foo(self):
        print 'a'

class B(object):
    def foo(self):
        print 'b'

var = None    
if something:
    var = A()
else:
    var = B()

var.foo()

有没有办法在C ++中声明var? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

使用std::variantboost::variant

using AorB = std::variant<A, B>;

示例:

AorB var;
if(something) var = A{};
else var = B{};

致电foo

std::visit([](auto& x){ x.foo(); }, var);

答案 1 :(得分:1)

C ++是一种强类型语言,因此编写此代码时无法将其转换为C ++。

您可以通过使用接口/抽象基类来执行类似的操作:

class Foo
{
public:
    virtual void foo() = 0;
};

class A : public Foo
{
public:
    virtual void foo()
    {
        std::cout << "a";
    }
};

class B : public Foo
{
public:
    virtual void foo()
    {
        std::cout << "b";
    }
};

int main(int arg, char** argv)
{
    Foo* foo = nullptr;
    if(...)
    {
        foo = new A();
    }
    else
    {
        foo = new B();
    }

    foo->foo();
    delete foo;
}

(请注意,在这里使用智能指针要好得多,而不是显式调用newdelete,但我想保持代码简单。)