我正在尝试创建一个构造函数,它将接受具有未知类型和未知参数的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 file
#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;
};
我很确定已经回答here,但我不明白如何实施解决方案。
我应该扩展我实际上要做的事情。我正在尝试创建一个稍后将用于在opengl中创建按钮的类。这些按钮可以具有未知返回类型和未知参数(类型和数量)的函数。我正在尝试进行一个测试,我只是创建一个对象,我可以传递一个具有这些要求的函数然后运行该函数(就像我点击了按钮)一旦我有了这个我已经有opengl端处理我是只是试图做出概念验证。我正在使用std :: function / lambda函数,因为我认为使用捕获将是有益的。
答案 0 :(得分:0)
不清楚你想要做什么。也许你正在寻找这样的东西:
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;
};