c++ 我可以通过转换[duplicate]从类指针中获取函数吗

klsxnrf1  于 2023-05-30  发布在  其他
关注(0)|答案(2)|浏览(212)

此问题已在此处有答案

Calling C++ member functions via a function pointer(10个答案)
7天前关闭
我有这个类,我试图从我的类指针的指针提取x1函数

class myclass
{
public:
myclass();
~myclass();
int x = 0;
int x1();
private:


};

int myclass::x1() 
{
return 100;
}

像这样

myclass* ptr = new myclass[10];
for (int i = 0; i < 10; i++)
ptr[i].x = i*11;
for (int i = 0; i < 10; i++)
{
 std::cout << ((ptr + i)->x) << std::endl;
 void *v = (void *)((ptr + i)->x);
 typedef int (*fptr)()=//what I need to do to v to get x1 function and call it; 
    
}

我能做这个吗?这在C++中是允许的。我正在使用VS2019

fhg3lkii

fhg3lkii1#

可以使用***成员函数指针***。语法如下:

int (myclass::*myFuncPtr)() = &myclass::x1;
// call it by object 
(object.*myFuncPtr)();
// or by the pointer of the object
(objectPtr->*myFuncPtr)();

更现代的方法是:

using MyFuncPtr = decltype(&myclass::x1);
MyFuncPtr myFuncPtr = &myclass::x1;
// both by object
std::invoke(myFuncPtr, object);
// and by pointer is correct
std::invoke(myFuncPtr, objectPtr);

注意,必须在成员函数中为this提供一个对象。只有静态成员函数可以直接调用而不需要绑定到对象。
你可以参考我的previous answer来了解更多。

wfauudbj

wfauudbj2#

在C++中,不能通过指向成员变量的指针直接访问成员函数。要访问和调用类的x1函数,需要有一个指向myclass示例的指针,而不仅仅是指向成员变量的指针。

myclass* ptr = new myclass[10];
for (int i = 0; i < 10; i++)
    ptr[i].x = i * 11;

for (int i = 0; i < 10; i++)
{
    std::cout << ((ptr + i)->x) << std::endl;
    myclass* instance = ptr + i; // Get the pointer to the current instance

    int result = instance->x1(); // Call the x1 function

    std::cout << "x1 result: " << result << std::endl;
}

delete[] ptr; // Delete the allocated memory

相关问题