11

我将指向函数的指针传递给函数模板:

int f(int a) { return a+1; }

template<typename F>
void use(F f) {
    static_assert(std::is_function<F>::value, "Function required"); 
}

int main() {
    use(&f); // Plain f does not work either.
}

但是模板参数F未被识别is_function为函数,并且静态断言失败。编译器错误消息说这Fint(*)(int)指向函数的指针。为什么它会这样?在这种情况下,如何识别函数或函数指针?

4

1 回答 1

15

F是一个指向函数的指针(不管你是通过f还是&f)。所以删除指针:

std::is_function<typename std::remove_pointer<F>::type>::value

(具有讽刺意味的是,std::is_function<std::function<FT>> == false;-))

于 2013-05-06T09:01:59.927 回答