首页 > 解决方案 > 从另一个类中调用以 void* 作为参数的函数

问题描述

我的事件管理器有以下代码:

#pragma once

namespace EventManager {
    enum class EventType {
        OnUpdate,
        OnDraw,
        Size
    };
    extern std::vector<void*> EventCallbacks[(unsigned int)EventType::Size];

    void AddEventHandler(EventType eventId, void* callback);
    void RemoveEventHandler(EventType eventId, void* callback);

    template <typename... Args>
    void Trigger(EventType eventId, Args... args) {
        for (auto callback : EventCallbacks[(unsigned int)eventId]) {
            static_cast<void(*)(Args...)>(callback)(args...);
        }
    }

    template <typename... Args>
    bool TriggerProcess(EventType eventId, Args... args) {
        auto process = true;
        for (auto callback : EventCallbacks[(unsigned int)eventId]) {
            if (!static_cast<bool(*)(Args...)>(callback)(args...)) {
                process = false;
            }
        }
        return process;
    }
}

我正在尝试从另一个类中调用 EventManager::AddEventHandler ,但出现以下错误:

错误

如果我尝试从命名空间而不是类中执行此操作,它工作正常,但我似乎无法弄清楚如何从此类内部使其工作。

标签: c++classpointersparameters

解决方案


推荐阅读