C ++如何将具有变化量的参数的函数作为参数传递

时间:2019-06-15 15:44:03

标签: c++ templates functor std-function parameter-list

我正在编写一个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(Functor&,int类)”(?? $ RenderLoop @ H @ GLFW_Facade @@ QEAAXAEAV?$ Functor @ XH @@ H @ Z)在函数main ... / main.obj 1

我期望它将被链接出去。

0 个答案:

没有答案