有没有办法接受任何函数签名作为参数?例如:
void accepter(void (*func)(int)) { ... }
会接受void (*)(int)
类型的任何内容。我知道我可以使用模板,例如:
template<class T>
void accepter(T func) { ... }
哪个可以工作,但是它允许传入非函数。我如何仅以void *
过滤任何类型指针的方式过滤函数?
答案 0 :(得分:2)
使用C ++ 11的std::function
应该可以工作:
#include <functional>
template<typename T>
void test (std::function<T> func) {
你可以使用它,例如:
int foo (int);
std::sting bar (bool);
test(std::function<int(int)>(foo));
test(std::function<std::string(bool)>(bar));