是否可以创建一个接收函数指针的可变参数包的模板函数?
template<ReturnType (*FN)(), ReturnType (*FNX...)()>
void run() {
...
run<FNX...>();
...
}
我试图将...
放在我能想到的所有地方,但我无法将其编译。这不受支持吗?
答案 0 :(得分:2)
你可以使用这种语法,但看起来很奇怪:
template<void(*... Functions)()>
void call_all()
{
initializer_list<int>{(Functions(), 0)...};
}
我为这种类型添加了别名:
template <typename T>
using function_ptr = add_pointer_t<enable_if_t<is_function<T>::value,T>>;
template<function_ptr<void()>... Functions>
void call_all()
{
initializer_list<int>{(Functions(), 0)...};
}
您还可以使用帮助程序类进行更高级的处理:
using fp = function_ptr<string()>;
template<fp First, fp... Others>
struct helper
{
static void run()
{
helper<First>::run();
helper<Others...>::run();
}
};
template<fp One>
struct helper<One>
{
static void run()
{
DBG(One());
}
};
template<fp... Functions>
void run()
{
helper<Functions...>::run();
}