如何将lambda函数传递到具有未知类型和未知参数的构造函数
How to pass a lambda function into a constructor with unknown type and unknown parameters
我正在尝试创建一个构造函数,该构造函数将带有未知类型和未知参数的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
相关文章:
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 即使直接从官方示例中复制,也找不到未知类型名称QML_ELEMENT和 QML 模块
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- 线程 std::调用未知类型,无法专门化函数错误
- MacOS 上的 LLVM - 标准文件 iosfwd 中未知类型名称'template'
- C++ 未知类型名称,即使类型是通过标头定义的
- 通过模板函数对未知类型调用方法
- 错误:使用 SWIG 的未知类型名称"类"
- C++:将未知类型的对象存储为成员变量的类
- 为什么未知类型名称"Complejo"?
- 在 Mac OS x 中制造期间出现错误未知类型名称"constexpr"
- 查找上下文RPC_NS_HANDLE未知类型名称
- 错误:未知类型名称"功能跟踪"
- C++中的自由定理:模板是否本质上对未知类型的对象无知和中立?
- 未知 使用用于C++代码的标头编译 C 代码时char16_t未知类型名称
- Linux中未知类型名称UINT64_T和UINT16_T UINT8_T
- 如何确定未知类型数组的索引是否为空
- 当我返回节点*时,C++中出现未知类型错误
- 无法编译任何C++程序;错误:未知类型名称'uint8_t'