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这样的元编程特征类?即仅使用函数推导出参数.
不,那是不可能的.模板参数推导只能推断类型,常量和模板都是参数类型的"组成"部分,例如,演绎void
并Args...
从void(*)(Args&&...)
在你的榜样,或者推断T
和N
从T(&)[N]
.它不能推断出类型中没有出现的任何内容.
对于非多态lambda类型T
,类型&T::operator()
包含有关lambda参数类型的可推导信息.但T
它本身并没有.