C++ 默认参数模板与可变模板:最后一个模板参数是什么?
我有点困惑,因为默认参数模板和可变模板参数都必须是模板的最后一个参数。那么,我的函数的好的官方语法是什么C++ 默认参数模板与可变模板:最后一个模板参数是什么?,c++,templates,c++11,variadic-templates,C++,Templates,C++11,Variadic Templates,我有点困惑,因为默认参数模板和可变模板参数都必须是模板的最后一个参数。那么,我的函数的好的官方语法是什么 template<typename T, class T2 = double, unsigned int... TDIM> myFunction(/* SOMETHING */) template myFunction(/*SOMETHING*/) 或 template myFunction(/*SOMETHING*/) 事实上,模板参数包和默认参数不必是函数中的最后一个,如
template<typename T, class T2 = double, unsigned int... TDIM> myFunction(/* SOMETHING */)
template myFunction(/*SOMETHING*/)
或
template myFunction(/*SOMETHING*/)
事实上,模板参数包和默认参数不必是函数中的最后一个,如果后面的任何参数将被推断(或默认):
在这种情况下,我会将包和其他模板参数相对于它们的函数参数放在同一个顺序上
对于(主要)类模板,这当然是不同的,因为不可能有推断参数。事实上,变量包必须位于模板参数列表的末尾:
template<class T, class... Args, class T2=int>
struct X{}; // error
模板
结构X{};//错误
对于部分专业化,顺序无关紧要,这也是一种纯粹的风格选择。我个人会像以前一样,将它们与主模板的参数相关联
template<class T1, class T2>
struct X{};
template<template<class...> class T1, class... A1,
template<class...> class T2, class... A2>
struct X<T1<A1...>, T2<A2...>>{};
模板
结构X{};
模板
结构X{};
template<class...> struct pack{};
template<class T, class... P1, class... P2, class T2>
void f(pack<P1...>, pack<P2...>, T2){}
template<class T, class... Args, class T2=int>
struct X{}; // error
template<class T1, class T2>
struct X{};
template<template<class...> class T1, class... A1,
template<class...> class T2, class... A2>
struct X<T1<A1...>, T2<A2...>>{};