Thr*_*ton 0 c++ parameters templates
我在递归模板包解包方面遇到了麻烦。我目前拥有的是:
template<T>
constexpr void register_types() {
do_something<T>();
return;
}
template <class T, T2, class... Args>
constexpr void register_types() {
do_something<T>();
register_types<T2, Args...>();
}
int main(int argc, char** argv) {
register_types<unsigned char, unsigned short, unsigned int, unsigned long long int>();
Run Code Online (Sandbox Code Playgroud)
但是我想要一个更空的基本案例,比如
template<>
constexpr void register_types() {
return;
}
template <class T, class... Args>
constexpr void register_types() {
do_something<T>();
register_types<Args...>();
}
Run Code Online (Sandbox Code Playgroud)
但是,这给了我错误:
src/benchmarks/benchmark_main.cc:68:31: error: ‘register_types’ is not a template function
是否可以将空参数包作为基本情况?我看过这篇文章,但希望尽可能避免使用 SFINAE。
是否可以将空参数包作为基本情况?
您不能声明没有模板参数的模板函数。
但是您可以声明一个模板函数,该函数接受模板参数的空列表(使用默认值/类型或可变参数)。
对于您的案例建议:尝试使用
template <int = 0>
constexpr void register_types() {
return;
}
template <class T, class... Args>
constexpr void register_types() {
do_something<T>();
register_types<Args...>();
}
Run Code Online (Sandbox Code Playgroud)
这样,地面案例(第一个)是一个常规模板函数,它接受零模板参数(感谢默认值)。
接受整数而不是类型,当Args...不为空时不会给您带来冲突问题。
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |