允许将模板参数留空(使用<>),如何将位置参数留空或重写以实现相同的效果.
template <int i = 0,int j = 1,int k = 2> void blah() { std::cout << i << " " << j << " " << k << std::endl; } int main() { blah(); // ok blah<>(); // ok blah<1>(); // ok,i = 1 blah<1,3>(); // not ok,i = 1,j = 1 (default),k = 3 return 0; }
解决方法
这是不可能的.你必须通过它.
这是一个建议:
auto constexpr default_j = 1; template <int i = 0,int j = default_j,int k = 2> void blah() { std::cout << i << " " << j << " " << k << std::endl; } int main() { blah(); // ok blah<>(); // ok blah<1>(); // ok,i = 0 blah<1,default_j,3>(); // ok,explicit and without duplicate magic numbers! return 0; }