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? 提前谢谢。
答案 0 :(得分:3)
使用std::variant
或boost::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;
}
(请注意,在这里使用智能指针要好得多,而不是显式调用new
和delete
,但我想保持代码简单。)