gal*_*tte 3 c++ lambda templates function
我有一个带有std::function参数的模板函数,模板参数定义函数签名:
template<typename... Args>
void addController(const char * name, const std::function<bool(Args...)> & func);
Run Code Online (Sandbox Code Playgroud)
它可以传递一个std::function变量:
std::function<bool()> foo_func = [this]()->bool {return this->isFoo(); };
addController<>("foo", foo_func); //Works
Run Code Online (Sandbox Code Playgroud)
但如果我直接传递 lambda,则无法推导出类型:
//Fails to compile
addController<>("foo", [this]()->bool {return this->isFoo(); });
Run Code Online (Sandbox Code Playgroud)
使用非模板函数可以:
void addControllerNoArg(const char * name, std::function<bool()> func);
addControllerNoArg("foo", [this]() {return this->isFoo(); }); //Works
Run Code Online (Sandbox Code Playgroud)
我需要 <typename... Args> 模板来将变体向量参数表展开到函数调用中。这实际上在实现中确实有效,唯一的问题是我无法直接将 lambda 传递给 addController 。
最小示例: https: //onlinegdb.com/MS1cEreKhk
方法是通用可调用:
template<typename F>
void addController(const char* name, F f)
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |