gpt4 book ai didi

c++ - 将 lambda 传递给以 std::function 作为参数的模板函数

转载 作者:行者123 更新时间:2023-12-05 01:03:40 26 4
gpt4 key购买 nike

我有一个带有 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

我需要 模板来将变体 vector 参数表解包到函数调用中。这实际上在实现中起作用,唯一的问题是我不能直接将 lambda 传递给 addController。

最小的例子: https://onlinegdb.com/MS1cEreKhk

最佳答案

方法是通用可调用的:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com