0

c++ で定義済みの Type_pointer からその型にキャストすることは可能ですか?

たとえば、カスタム XType を定義しました。私はこのようなことをしたいのですが、エラーが発生します:

XType* b;    
XType a = (XType) b; 

Typeのみを受け入れる(しないType*)関数にポインタ自体を渡したい

4

2 に答える 2

2

You should dereference the pointer with the * operator:

struct Type {
  Type(Type*) {}
};

void f(Type t) {
}

int main () {
  Type a;
  Type* b = &a;

  // Q: how to invoke f() if I only have b?
  // A: With the dereference operator
  f(*b);
}
于 2012-10-08T14:55:31.570 に答える
0

@Robᵩ さんの提案に加えて、ポインタを受け入れるように関数を変更できます。

実際、指定された関数内から他の関数​​にポインターを渡す予定がある場合は、ポインター (または参照) をパラメーターとして取得する必要があります。そうしないと、元のオブジェクトのコピーがパラメーターとして取得されるため、 ' 元のオブジェクトのアドレス (つまり、ポインタ) を取得できなくなります。

リファクタリングを節約したい場合は、参照トリックを実行できます。

void g(T* pt)
{
    // ...
}

void f(T& rt) // was: void f(T rt)
{
    cout << rt.x << endl; // no need to change, syntax of ref access
                          // is the same as value access
    g(&rt); // here you get the pointer to the original t
}

T* t = new T();
f(t);
于 2012-10-08T15:02:27.647 に答える