模板函数可以推导出lambda的参数吗?

Bri*_*ian 3 c++ lambda function-pointers metaprogramming c++17

带有函数指针的模板化函数可以推导出该函数指针的参数,如下所示:

template<class... Args>
void func(void (*ptr)(Args&& ...)) {
    //Do something useful knowing the Args...
}
Run Code Online (Sandbox Code Playgroud)

你可以用lambda作为参数吗?没有求助std::function或编写像function_traits这样的元编程特征类?即仅使用函数推导出参数.

Bri*_*ian 5

不,那是不可能的.模板参数推导只能推断类型,常量和模板都是参数类型的"组成"部分,例如,演绎voidArgs...void(*)(Args&&...)在你的榜样,或者推断TNT(&)[N].它不能推断出类型中没有出现的任何内容.

对于非多态lambda类型T,类型&T::operator()包含有关lambda参数类型的可推导信息.但T它本身并没有.