Ответ 1
func2(&obj, &obj2);
Используйте ссылочные параметры, например, обычные переменные.
Есть ли способ "преобразовать" ссылку на указатель в c++? В приведенном ниже примере func2
уже определил прототип, и я не могу его изменить, но func
- это мой API, и я хотел бы либо передать оба параметра, либо один (и второй установить в NULL), либо ни один (оба в NULL ):
void func2(some1 *p1, some2 *p2);
func(some1& obj, some2& obj2)
{
func2(..);
}
func2(&obj, &obj2);
Используйте ссылочные параметры, например, обычные переменные.
Просто получите адрес объекта.
some1 *p = &obj;
Или в вашем случае:
func2(&obj, &obj2);
func2(&obj, &obj2);
- это то, что вы должны использовать.
В обычных случаях вы можете просто использовать &
:
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));
}
Для чистой конструкции поместите все в класс (или используйте пространства имен)
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); }
}