-4

我想将一个指向一个实例的指针转换MyClass为一个int*,最好以这样一种方式,我可以这样做:

void function(int*) {...};
MyClass * instance = new MyClass;
function(instance);

int 指针不应是 MyClass 指针的二进制副本。目前,我正在使用以下代码来获得类似的结果:

int * MyClass::getIntPointer() {return &my_int;}

我如何将 aMyClass*转换为 a int*

4

3 回答 3

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.
于 2013-09-30T22:29:58.987 回答
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;
}
于 2013-09-30T22:29:14.660 回答
0

对不起,你卡住了。您不能为指针类型重载类型转换运算符。这是您可以MyClass*直接转换为int*并要求结果int*指向第一个int成员的唯一方法,即使该类的存储是非 POD 也是如此。

如果您可以保证它MyClass始终是 POD 类型,那么reinterpret_cast<int*>(instance)就足够了。但是您要求“int 指针不应该是 MyClass 指针的二进制副本”意味着没有这样的保证。

如果您愿意从 aMyClass&而不是 a开始MyClass*,那么您可以使用 cmbasnett 为类添加类型转换重载的示例。

于 2013-09-30T23:29:22.563 回答