4

2 種類のオブジェクト A と B と 2 つのゲッター関数があるとします。

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には必要なものがあると思います。これは、いくつかの型の 1 つである単一のオブジェクトの抽象化です。関数の署名は次のようになります。

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