是否可以从c ++中预定义的Type_pointer转换为Type?
例如,我们定义了一个自定义XType。 我想做这样的事情,但是我收到了一个错误:
XType* b;
XType a = (XType) b;
我想将指针本身传递给只接受Type
(不是Type*
)
答案 0 :(得分:2)
您应该使用*
运算符取消引用指针:
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);
}
答案 1 :(得分: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);