C++ 设置默认模板非类型参数而不显式指定其余参数

C++ 设置默认模板非类型参数而不显式指定其余参数,c++,templates,c++11,stl,containers,C++,Templates,C++11,Stl,Containers,首先,代码仅供参考(不要担心您可以使用额外的参数 那么std::integral\u constant maxDepth呢 template <std::size_t N> using Depth_t = std::integral_constant<std::size_t, N>; template<template<typename ...> class C , typename T, std::size_t D

首先,代码仅供参考(不要担心
您可以使用额外的参数

那么
std::integral\u constant maxDepth

template <std::size_t N> using Depth_t = std::integral_constant<std::size_t, N>;

template<template<typename ...> class C ,
         typename T,
         std::size_t Depth = 0,
         typename = typename std::enable_if<is_container<T>::value>::type>
void print_nested(const C<T>& cont,
                  Depth_t<Depth> = {},
                  const char& separator = ',',
                  const std::deque<std::pair<char,char>>& closures = {{'{','}'},{'[',']'},
                  unsigned depth = 0
                  );
使用深度t=std::积分常数的模板; 模板 无效打印嵌套(常量C和cont, 深度t={}, 常量字符和分隔符=',', const std::deque&closures={{{{},},{{{{},}, 无符号深度=0 );
就这么说吧

print_nested(nested, Depth_t<2>{});
print_嵌套(嵌套,深度{});

除了您的示例非常简单之外:为什么您希望深度作为模板参数而不是普通参数?@Anedar,因为我必须在函数参数列表中的某个位置放置新参数,这将打破我的设计,函数参数只决定打印什么字符,而不是如何打印字符重新打印:)如果您需要单独编译的函数的不同实例化,则模板参数是必需的。如果您实际使用它的唯一位置是在if子句中,则情况并非如此。但是您是否尝试将其移动到第一个位置,并为其他模板参数提供一些随机默认值?应该覆盖它不管怎样,如果它是从参数中推导出来的。这非常有效。谢谢,没有问题了。@Anedar您甚至不需要“给其他模板参数一些随机默认值”。
template void f(t arg);
本身完全有效。
int Depth = 0
template<template<typename ...> class C ,
         typename T,
         int Depth = 0,
         typename = typename std::enable_if<is_container<T>::value>::type>
print_nested(nested);
print_nested<std::vector<std::deque<std::list<int>>>, std::deque<std::list<int>>, 2>(nested);
template <std::size_t N> using Depth_t = std::integral_constant<std::size_t, N>;

template<template<typename ...> class C ,
         typename T,
         std::size_t Depth = 0,
         typename = typename std::enable_if<is_container<T>::value>::type>
void print_nested(const C<T>& cont,
                  Depth_t<Depth> = {},
                  const char& separator = ',',
                  const std::deque<std::pair<char,char>>& closures = {{'{','}'},{'[',']'},
                  unsigned depth = 0
                  );
print_nested(nested, Depth_t<2>{});