如何使用智能指针对象执行成员函数指针?

问题描述 投票:6回答:2

我正在尝试使用智能指针实例执行类的member-function。该函数的地址通过值传递,我想通过各个类的智能指针实例来调用它。]

我已经尝试过:

(registerList.*setRegister)();

但是它出错了:

no match for ‘operator->*

[Register类成员函数:

uint16_t Registers::getSP()
{
    return this->sp;
}

代码段:

std::unique_ptr<Registers> registerList;

SetRegisteropcodeLdWordRegister(&Registers::getSP)

void opcodeLdWordRegister(uint16_t (*Registers::setRegister)()) 
{
        (registerList.*setRegister)();
}

我正在尝试使用智能指针实例执行类的成员函数。该函数的地址通过值传递,我想通过...

c++ c++11 smart-pointers unique-ptr member-function-pointers
2个回答
3
投票

首先,您显示的代码和错误消息不匹配。对于给定的代码you should be getting (from clang) following error message


3
投票

如果您没有#include <iostream> #include <functional> // std::invoke #include <memory> // std::unique_ptr class Registers { uint16_t sp{2}; // member initialized with 2 public: uint16_t getSP() const // function can be marked const as it does not alter the member { return this->sp; } }; auto registerList = std::make_unique<Registers>(); // initialized the pointer with default object void opcodeLdWordRegister(uint16_t(Registers::*setRegister)() const) // ^^^^^^^^^^^^^^^^^^^^^^^^^ correct syntax { std::cout << std::invoke(setRegister, registerList); } int main() { opcodeLdWordRegister(&Registers::getSP); return 0; } ,您仍然可以执行其操作,即取消引用呼叫站点中的(唯一)指针。

© www.soinside.com 2019 - 2024. All rights reserved.