4

假设有两种类型的对象 A 和 B 以及两个 getter 函数

objA* getA(int id) and objB* getB(int id)

对象 A 和 B 是互斥的。即如果一个对象是A,那么它不是B。当使用ID 来查找对象时,我使用的代码如下。所以我只是想知道该函数是否可以使用模板返回可能指向 A 或 B 的非 NULL 对象指针。如果 id 无效,则返回 null。

void find(int id)
{
    objA* pa = getA(id);
    if (pa != NULL)
    {
      return;
    }

    objB* pb = getB(id);
    if (pb != NULL)
    {
      return;
    }
}
4

1 回答 1

3

我认为Boost Variant有你需要的东西。它是对可能是几种类型之一的单个对象的抽象。然后您的函数签名变为:

boost::variant<A*, B*> find(int id);
于 2013-03-28T03:14:44.030 回答