Преобразовать ссылку на представление указателя в С++

Есть ли способ "преобразовать" ссылку на указатель в c++? В приведенном ниже примере func2 уже определил прототип, и я не могу его изменить, но func - это мой API, и я хотел бы либо передать оба параметра, либо один (и второй установить в NULL), либо ни один (оба в NULL ):

void func2(some1 *p1, some2 *p2);

func(some1& obj, some2& obj2)
{
   func2(..);
}

Ответы

Ответ 1

func2(&obj, &obj2);

Используйте ссылочные параметры, например, обычные переменные.

Ответ 2

Просто получите адрес объекта.

some1 *p = &obj;

Или в вашем случае:

func2(&obj, &obj2);

Ответ 3

 func2(&obj, &obj2);

- это то, что вы должны использовать.

Ответ 4

В обычных случаях вы можете просто использовать &:

void func(some1& obj, some2& obj2)
{
    func2(&obj, &obj2);
}

но operator& может быть перегружен, поэтому для этих случаев следует использовать std::addressof (начиная с С++ 11):

void func(some1& obj, some2& obj2)
{
    func2(std::addressof(obj), std::addressof(obj2));
}

Ответ 5

Для чистой конструкции поместите все в класс (или используйте пространства имен)

class X {
   private:
   void func2(someA*, someB*);

   public:
   func(someA& a, someB& b) { func2(&a, &b); }
   func(someA& a) { func2(&a, 0); }
   func() { func2(0, 0); }
}