我有一个带有 std::function
参数的模板函数,模板参数定义了函数签名:
template<typename... Args>
void addController(const char * name, const std::function<bool(Args...)> & func);
它可以传递 std::function
变量:
std::function<bool()> foo_func = [this]()->bool {return this->isFoo(); };
addController<>("foo", foo_func); //Works
但如果我直接传递 lambda,则无法推断类型:
//Fails to compile
addController<>("foo", [this]()->bool {return this->isFoo(); });
并且使用非模板函数有效:
void addControllerNoArg(const char * name, std::function<bool()> func);
addControllerNoArg("foo", [this]() {return this->isFoo(); }); //Works
我需要
最佳答案
方法是通用可调用的:
template<typename F>
void addController(const char* name, F f)
如果需要,您可以将其转发到您的 std::function
版本:
template <typename... Args>
void addController(const char* name, const std::function<bool(Args...)> & func)
{
/*..*/
}
template <typename F>
void addController(const char* name, F f)
{
addController(name, std::function{f}); // CTAD used, so C++17 required
}
关于c++ - 将 lambda 传递给以 std::function 作为参数的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73881018/