C++ 存储对两个可能类之一的实例的引用

问题描述 投票:0回答:1

我有一个类层次结构(简化)如下所示:

struct A {};
struct B : public A {};
struct C {
    A* object;
};

我想在其他类中存储对此层次结构中对象的引用,但该对象可以是 B 的实例,也可以是存储 B 实例的 C 实例。是否有一种惯用的方法来执行此操作,或者应该我重新考虑我的班级结构?仅供参考,我不能只是将 B 和 C 设为某个新类的子类,然后存储对该超类的引用,因为它们在概念上具有不同的目的并包含不同的字段和方法。

c++ oop pointers
1个回答
0
投票

std::variant
正是您所寻求的。看到
B
C
没有任何关系,多态性在这里无济于事。所以这样做:

std::variant<B, C> b_or_c;
                   b_or_c = B{};

C value;
try
{ value = std::get<C>(b_or_c); }
except (const std::bad_variant_access& exception)
{ std::cout << exception.what(); }
© www.soinside.com 2019 - 2024. All rights reserved.