只要您声明一个模板,您就可以直接使用传入的函数对象。此外,您应该将函数参数声明为引用而不是按值:
template <typename fn>
void call_any(fn&& func) {
func();
};
如果你想用参数调用一个函数,你可以这样做:
template <typename fn, typename... Args>
void call_any_many(fn&& func, Args&&... args) {
func(std::forward<Args>(args)...);
};
使用示例:
int main ()
{
call_void([]() { std::cout << "Hello, void World!" << std::endl; });
call_any([]() { std::cout << "Hello, any World!" << std::endl; });
call_any_many([](int x) { std::cout << "Hello, any many World-" << x << "!" << std::endl; }, 1234);
return 0;
}
但是如果你的意图是存储一些函数指针而不是直接调用它们,我建议使用std::function
from <functional>
header。您可以从这里查看一些信息和示例:http: //en.cppreference.com/w/cpp/utility/functional/function
例如:
#include <iostream>
#include <functional>
int main ()
{
std::function<void()> anyf = []() { std::cout << "Hello, any World!" << std::endl; };
std::function<void(int)> intf = [](int x) { std::cout << "Hello, any many World-" << x << "!" << std::endl; };
anyf();
intf(1234);
return 0;
}