微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++如何存储函数指针?

如何解决C ++如何存储函数指针?

这是我的代码

class Opcodes {
public:
    Opcodes() = default;
    virtual ~Opcodes() = default;
    virtual void Initialize() = 0;
    virtual void ValidateAndSetServerOpcode(ServerOpcode serverOpcode,void(WorldSession::*HandlerFunction)(std::vector<std::byte>& data)) = 0;
    class PacketHandler{
    public:
        PacketHandler() = default;
        ServerOpcode serverOpcode;
        std::vector<std::byte> data;
        void(WorldSession::*HandlerFunction)(std::vector<std::byte>& data);
        void Run();
    private:
        WorldSession* _session;
    };

protected:
    PacketHandler* opcodeHandler[NUM_MSG_TYPES];
};

让我们专注于此功能

void ValidateAndSetServerOpcode(ServerOpcode serverOpcode,void(WorldSession::*HandlerFunction)(std::vector<std::byte>& data))

如何将void(WorldSession::*HandlerFunction)(std::vector<std::byte>& data)的第二个参数ValidateAndSetServerOpcode存储在PacketHandler内的指针成员中?

我尝试了void(WorldSession::*HandlerFunction)(std::vector<std::byte>& data);,但这不是正确的方法

这是我尝试在ValidateAndSetServerOpcode内分配它的方法

opcodeHandler[serverOpcode]->HandlerFunction = HandlerFunction;

但是它不起作用。尝试这样分配时会崩溃。

有可能吗?

解决方法

函数指针的定义正确,但是也许您没有初始化所使用的指针

无论如何,您的方法是C方法,甚至是C++之前的C++11 standard方法。 从C++11 standard开始,最好使用标准库提供的std::function,这样也可以分配一个lambda函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。