C++ Как передать функцию с переменным количеством параметров в качестве параметра

Я пишу оболочку библиотеки GLFW - класс с именем GLFW_Facade. Существует функция RenderLoop, которая упоминается как цикл, в котором будет выполняться функция рендеринга. Мне нужно передать эту функцию рендеринга в RenderLoop. Я хотел бы, чтобы функция рендеринга могла принимать различное количество параметров, поэтому я сделал это с помощью шаблона. Код компилируется, но не связывается.

Сначала я передавал std::function с различным количеством аргументов, вот так

template <typename... N>
void GLFW_Facade::RenderLoop(std::function<void, N...>& cb, N... params)

Затем я создал оболочку класса для std::function с различными аргументами под названием Functor.

template <typename R, typename... Args>
class Functor {
public:
    typedef std::function<R(Args...)> FuncType;
    Functor(FuncType func) : mFunc(func) {}
    Functor& operator()(Args... args) {
        mFunc(args...);
        return *this;
    }
private:
    FuncType mFunc;
};

template <typename... N>
void GLFW_Facade::RenderLoop(Functor<void, N...>& cb, N... params) {
    CheckGLFWWindow();
    while (!glfwWindowShouldClose(m_Window)) {
        cb(params);
        ProcessCloseCondition();
        glfwSwapBuffers(m_Window);
        glfwPollEvents();
    }
}

///usage

Functor<void, int> renderfn(render);
glfw->RenderLoop<int>(renderfn, VAO);

Ошибка LNK2019 ссылки на недопустимый внешний символ "public: void __cdecl GLFW_Facade::RenderLoop(class Functor &,int)" (??$RenderLoop@H@GLFW_Facade@@QEAAXAEAV?$Functor@XH@@H@Z) в функция main .../main.obj 1

Я ожидал, что это будет связано.

0 ответов

Другие вопросы по тегам