web-dev-qa-db-ja.com

参照をC ++のポインター表現に変換します

C++でポインタへの参照を「変換」する方法はありますか?以下の例では、func2はすでにプロトタイプを定義しているので変更できませんが、funcは私のAPIであり、両方のパラメーターを渡すか、1つ(および2番目にNULLに設定)またはどちらにも設定しません(両方NULLへ):

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

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

func2(&obj, &obj2);

通常の変数のような参照パラメーターを使用します。

30
Chen

オブジェクトのアドレスを取得するだけです。

some1 *p = &obj;

またはあなたの場合:

func2(&obj, &obj2);
9
Jonathan Wood
 func2(&obj, &obj2);

使用すべきものです。

3
Umer Farooq

通常は、単に&を使用できます:

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

ただし、operator&はオーバーロードされる可能性があるため、これらの場合は std::addressof (C++ 11以降)を使用する必要があります。

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

すっきりとしたデザインのために、すべてをクラスに入れます(または名前空間を使用します)

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); }
}
1
user2249683