如何将lambda函数传递到具有未知类型和未知参数的构造函数

How to pass a lambda function into a constructor with unknown type and unknown parameters

本文关键字:未知 类型 参数 构造函数 lambda 函数      更新时间:2023-10-16

我正在尝试创建一个构造函数,该构造函数将带有未知类型和未知参数的lambda函数。我已经设法使它可以通过传递没有参数的函数来工作,但是当我尝试将参数添加到功能时,我无法理解如何匹配参数列表。

CPP文件

#include "TestBind.h"
using namespace std;
int main()
{
    int i = 10;
    function<int(int, int)> Multiply = [&i](int a, int b)
    {
        i = 11;
        return i * a * b;
    };
    g<int,int,int> n (Multiply); //problem line
    n.runFunc();
    cout << i << endl;
    cin.clear();
    cin.ignore();
    cin.get();
}

h文件

#include <functional>
#include <iostream>
using namespace std;
template <typename ReturnType, typename... Args>
class g
{
public:
    g(Args... args, function<ReturnType(Args...)> func) { f = func; };
    void runFunc() {
        cout << f() << endl;
    };
    ~g() {};
private:
    function<ReturnType(Args...)> f;
};

我很确定这已经在这里得到了回答,但是我不明白如何实施解决方案。

我应该扩展我实际要做的事情。我正在尝试举办一堂课,以稍后将用于在OpenGL中制作按钮。这些按钮可以具有未知返回类型和未知参数(类型和数量)的函数。我正在尝试进行一个测试,目前我只是制作一个可以通过这些要求传递函数的对象,然后运行该功能(好像我已经单击按钮一样),一旦我已经完成了我的opengl侧处理,我已经处理了只是试图做出概念证明。我正在使用std ::功能/lambda功能,因为我认为捕获的使用将是有益的。

尚不清楚您要做什么。也许您正在寻找这样的东西:

class g
{
public:
    template <typename F, typename... Args>
    g(F&& func, Args&&... args) {
        f = [=]() { std::cout << func(args...) << std::endl; };
    }
    void runFunc() {
        f();
    };
private:
    std::function<void()> f;
};

demo