c++ - 如何从 Variadics 模板获取参数

标签 c++ recursion variadic-templates variadic-functions template-meta-programming

This已经是一个很好的答案,但是,当我尝试将参数作为类型名(不知道确切的词)做同样的事情时,他们传递了任意数量的参数作为参数,例如:

int sum=0;
int func()
{
    return sum;
}

template <int first, int ... rest>
int func()
{
    sum += first;
    return func(rest...); //Error   C2660   'func': function does not take 4 arguments
    /*
     return func<rest...>(); this also doesn't work: Error 'int func(void)': could not deduce template argument for 'first' and 'func': no matching overloaded function found
     */
}


int main()
{
    cout << func<1,2,3,4,5>();
}

为什么那里有错误?有什么可能的修复方法吗?此外,我需要将参数作为类型名称而不是参数传递。

最佳答案

首先,“基础”函数需要是一个模板。

那么为了区分这两个模板,parameter-pack 模板需要至少接受两个模板参数。

最后,您可以不用全局 sum 变量来解决这个问题,而是使用 return 语句中的加法。

综合起来:

template <int first>
int func()
{
    return first;
}

template <int first, int second, int ...rest>
int func()
{
    return first + func<second, rest...>();
}

关于c++ - 如何从 Variadics 模板获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68986479/

相关文章:

C++11 可变参数模板 + 继承

c++ - 使用自定义类型专门化 std::complex 时运算符不明确

c++ - C++ 中的 MSD 基数排序(字典顺序)

sql-server - 如何将基于 CURSOR 的查询转换为基于 SET 的查询

c++ - 在模板函数 C++ 中的 F&&,Args &&... 参数之后添加另一个函数作为参数

c++ - Variadic 模板类遍历类型

C++ 静态成员变量作用域

c++ - 获取指针值

c++ - 我可以使用 vector 作为二叉树的底层数据存储吗

python - 递归函数 - 无错误且无输出