c++ で定義済みの Type_pointer からその型にキャストすることは可能ですか?
たとえば、カスタム XType を定義しました。私はこのようなことをしたいのですが、エラーが発生します:
XType* b;
XType a = (XType) b;
Type
のみを受け入れる(しないType*
)関数にポインタ自体を渡したい
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);
}
@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);