指向函数成员的指针

时间:2021-03-28 16:25:32

标签: c++ function class pointers reinterpret-cast

让我开始声明我是一个对自制编程充满热情的人,所以请原谅不专业的语言,英语不太好我得到了翻译的支持。根据我的理解,似乎无法将指向对象及其函数成员之一的指针转换为虚拟结构。尤其不能这样调用成员函数:

#include <iostream>

struct _T{};

class Class1
{
public:
    void print()
    { std::cout << "Class1::print ...." << std::endl; }

    int sum(int value)
    { return m_dato+value; }

private:
    int m_dato { 10 };

};


int main()
{
    Class1 item;
    void(_T::*func)();
    int(_T::*fsum)(int);

    Class1* p1=&item;

    auto p2=reinterpret_cast<_T*>(p1);
    func =reinterpret_cast<void(_T::*)()>(&Class1::print);

    (p2->*func)();

    fsum =reinterpret_cast<int(_T::*)(int)>(&Class1::sum);

    auto dato=(p2->*fsum)(55);

    std::cout << "Dato: " << dato << std::endl;  // ok 65..

    std::cout << "Fine procedura ...." << std::endl;

    return 0;

}

现在除了猜测指向 Class1 的指针可能不包含在 _T 指针中之外,我不明白为什么这段代码在所有条件下都能正常工作(如果类是派生的并且函数是虚拟的,在这种情况下多重继承,在函数只存在于基类中的情况下,等等......)。最后,我没有告诉编译器调用类(Class1)的地址,编译器很清楚,并且该函数与类指针有一定的偏移,并且该函数的签名类似于一个在演员之后存储。

0 个答案:

没有答案