【发布时间】:2019-02-07 11:36:38
【问题描述】:
struct setup_entry
{
template< typename T >
void Disable( bool(*p)(T*) ) { ... }
}
呼叫禁用:
setup_entry X;
Case 1: X.Disable( [](int*)->bool{...} ); //FAIL to deduce T
Case 2: X.Disable<int>( [](int*)->bool{...} ); //OK to deduce T
我想使用案例 1。(对用户来说更容易)
有什么想法吗?
记录的简化最终解决方案是这样做:
template< typename T >
void Disable( T&& Callback )
{
auto p = +Callback;
...
}
【问题讨论】:
-
与您的问题无关,但我建议不要使用函数指针作为参数。要么使用模板(就像所有标准库一样),要么使用
std::function。这样您就可以使用 any 可调用对象(例如 lambdas with 捕获)。顺便说一句,除非您在函数中需要T,否则为函数对象本身使用模板也可以解决您的问题。
标签: c++ c++11 templates lambda c++17