【发布时间】:2020-10-21 19:21:06
【问题描述】:
我有以下结构,可以将 ExampleInterfaceClass 的虚函数绑定到实现 ExampleInterfaceClass 中的虚函数的类:
struct ExampleStruct {
ExampleInterfaceClass *instance = nullptr;
ExampleInterfaceClass *(*InstantiateScript)(void);
void (*DestroyScript)(ExampleStruct *);
template <typename T> void Bind(void)
{
InstantiateScript = []()
{
return static_cast<ExampleInterfaceClass *>(new T());
};
DestroyScript = [](ExampleStruct *exampleStruct)
{
delete exampleStruct->instance;
exampleStruct->instance = nullptr;
};
}
};
现在我想将可变参数从 Bind() 转发到实现接口的类的实例化。我知道我必须将模板更改为以下内容
template <typename T, typename... T_args> void Bind(T_args &&... args)
但是由于 lambda,我无法将可变参数传递给类的实例化。 如果没有 lambda,我想我可以使用以下内容:
return static_cast<ExampleInterfaceClass *>(new T(std::forward<T_args>(args)...));
但是编译器告诉我'args'没有被捕获。
如何捕获可变参数并转发它们?
【问题讨论】:
-
您是否尝试过使用默认捕获
=? -
@SamVarshavchik - 捕获参数,无法再将 lambda 分配给函数指针。
-
@max66 即使是
=?那是一个副本。 -
正确。必须使用
std::function。 -
@SamVarshavchik 添加答案?