我正在尝试使用智能指针实例执行类的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)();
}
我正在尝试使用智能指针实例执行类的成员函数。该函数的地址通过值传递,我想通过...
首先,您显示的代码和错误消息不匹配。对于给定的代码you should be getting (from clang) following error message
如果您没有#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;
}
,您仍然可以执行其操作,即取消引用呼叫站点中的(唯一)指针。