我想将MyClass
的实例指向int*
,最好是这样我可以这样做:
void function(int*) {...};
MyClass * instance = new MyClass;
function(instance);
int指针不应该是MyClass指针的二进制副本。目前,我使用以下代码来实现类似的结果:
int * MyClass::getIntPointer() {return &my_int;}
如何将MyClass*
投射到int*
?
答案 0 :(得分:2)
您是否正在尝试访问班级的int
成员?如果是这样,你可以这样做:
class MyClass {
public:
int myInt;
};
void function(int*) {...};
MyClass* instance = new MyClass;
function(&instance->myInt);
您不希望将强制转换 MyClass转换为int,您只想访问 MyClass的成员。
所以这就是那条线的含义:
instance-> // follow the pointer to the actual MyClass object.
instance->myInt // access the int, "myInt"
&instance->myInt // get the address of that int
function(&instance->myInt); // call "function", passing to it the address of "myInt"
修改强>:
如果您正在创建一个包装int的类,您可以使用自定义转换运算符执行此操作,如@cmbasnett所示:
class MyClass {
public:
int* operator int*() { return &my_int; }
private:
int my_int;
};
MyClass instance;
function(instance); // this line will trigger the custom cast operator.
答案 1 :(得分:0)
这些中的任何一个都可能引起您的兴趣:
#include <iostream>
struct MyClass
{
int myInt;
operator int*()
{
return &myInt;
}
};
int main()
{
MyClass* instance = new MyClass();
//method 1
instance->myInt = 42;
int* a = &(instance->myInt);
//method 2
int* b = *instance;
std::cout << *a << std::endl;
std::cout << *b << std::endl;
}
答案 2 :(得分:0)
对不起,你被困了。您不能为指针类型重载类型转换操作符。这是您可以从MyClass*
直接投射到int*
的唯一方法,并要求生成的int*
指向第一个int
成员,即使该类的存储空间不存在-POD。
如果您可以保证MyClass
始终是POD类型,那么reinterpret_cast<int*>(instance)
就足够了。但是你的要求“int指针不应该是MyClass指针的二进制副本”意味着没有这样的保证。
如果您愿意以MyClass&
而不是MyClass*
开头,那么您可以使用cmbasnett为类添加类型转换过载的示例。