首页 > 解决方案 > 可变参数模板中的函数参数

问题描述

是否可以编写带有函数作为模板参数的可变参数模板类?

这些是有效的 c++ 声明

template <typename ...Types> class foo;

template <int func(int)>  class bar;

有没有可能做类似的事情

template <int func(int)...> class foobar; 

我尝试了很多不同的语法,比如

template <int ...func(int)> class foobar; 

并且什么都没有编译(我正在使用带有 -std=c++17 的 gcc 8.1.0)

标签: c++c++17

解决方案


语法是:

template <int (*...Fs)(int)> class foobar {};

这使得

int f1(int);
int f2(int);

foobar<&f1, &f2, &f1> obj;

使用别名可能会帮助您拥有更自然的语法:

using f_int_int = int (*)(int);
template <f_int_int...Fs> class foobar {};

甚至(感谢 Yakk 的评论):

template <typename T> using id_t = T;
template <id_t<int(*)(int)>...Fs> class foobar {};

推荐阅读