接受任何函数(但仅限函数)作为参数

时间:2014-07-02 15:34:49

标签: c++

有没有办法接受任何函数签名作为参数?例如:

void accepter(void (*func)(int)) {  ... }

会接受void (*)(int)类型的任何内容。我知道我可以使用模板,例如:

template<class T>
void accepter(T func) { ... }

哪个可以工作,但是它允许传入非函数。我如何仅以void *过滤任何类型指针的方式过滤函数?

1 个答案:

答案 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));