【发布时间】:2021-06-30 01:03:37
【问题描述】:
假设我们有我的代码的这个简化版本:
template<typename R>
R Context::executeTransient(std::function<R(VkCommandBuffer)> const &commands) {
...
R result = commands(commandBuffer);
...
return result;
}
我尝试将 lambda 函数作为参数传递给函数 Context::executeTransient(),但只有当我将 lambda 显式分配给特定的 std::function 类型时它才有效。这有效:
std::function<int(VkCommandBuffer)> f = [](VkCommandBuffer commandBuffer) {
printf("Test execution");
return 1;
};
context.executeTransient(f);
上面的例子有效,但出于审美原因,我想实现下面的例子,不知道这是否可能:
context.executeTransient([](VkCommandBuffer commandBuffer) {
printf("Test execution");
return 1;
});
我唯一的要求是Context::executeTransient() 应该接受具有模板化返回类型的 lambda 和函数以及具有某些特定类型的输入参数,例如VkCommandBuffer.
【问题讨论】:
标签: c++ templates lambda template-argument-deduction