假设我们需要编写一个这样的模板函数。
deep<func, 2>(1); // func(func(1))
template<auto foo, size_t depth, typename... Args>
auto deep(Args&&... args)
{
...
auto result = deep<foo, depth - 1>(std::forward<Args>(args)...);
...
return result;
}
这里出现了另一个具有部分特化的深度模板函数,它会简单地调用原始函数。就像是
template<auto foo, size_t depth = 0, typename... Args>
auto deep(Args... args)
{
return foo(std::forward<Args>(args)...);
}
但是在 c++ 中没有模板函数的部分特化。有没有办法在不使用类的情况下解决这个问题?
也许像
那么它会做吗?
只是,就我而言,这是
Args...args多余的,因为第二次和后续调用foo应用于单个参数,这也是返回类型(或可转换类型)。编译时的反转对我来说似乎是多余的。你不想这样吗?