Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 默认参数模板与可变模板:最后一个模板参数是什么?_C++_Templates_C++11_Variadic Templates - Fatal编程技术网

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...>>{};