c++ - C++11 中的非类型可变函数模板

标签 c++ c++11 variadic-templates

我看到一个blog post它使用了非类型可变参数模板(目前 gcc 不支持,仅 clang 支持)。

template <class T, size_t... Dimensions>
struct MultiDimArray { /* ... */ };

帖子中的示例编译正常,但我无法让它与函数模板一起工作。

谁能帮助找出正确的语法(如果存在的话)?

int max(int n) { return n; } // end condition

template <int... N> // replacing int... with typename... works
int max(int n, N... rest) // !! error: unknown type name 'N'
{
    int tmp = max(rest...);
    return n < tmp? tmp : n;
}

#include <iostream>
int main() 
{
   std::cout << max(3, 1, 4, 2, 5, 0) << std::endl;   
}

最佳答案

这将打印出所有元素, get max 可以类似地实现

template <int N>
void foo(){
  cout << N << endl;
}

template <int N, int M, int ... Rest>
void foo(){
  cout << N << endl;
  foo<M, Rest...>();
}


int main(){
  foo<1, 5, 7>();

  return 0;
}

关于c++ - C++11 中的非类型可变函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24169056/

相关文章:

c++ - 如何写入通过映射迭代器访问的 ofstream

c# - 当调试器分离时,应用程序能否得到通知?

c++ - std::string 实现是否符合 's.c_str() + s.size()' 不一定与 '&s[s.size()]' 相同?

c++ - Qt 标准项目和示例停止构建

c++ - 如果模板模板参数是 vector ,则需要不同的行为

c++ - 当省略号位于模式的最内层元素时,在可变参数模板中打包扩展

c++ - 使用可变模板的维度无关类

c++ - 如何在 C++ 中使用数组对 minheap 进行堆化?

multithreading - C++11线程池——带输入参数的任务

c++ - 进行测试和变异函数的STL算法