是否可以防止从参数包扩展的参数中的数组到指针衰减?
例如:
#include <iostream>
void foo() {
std::cout << "empty\n";
}
template <typename T, typename... Rest>
void foo(T &&t, Rest... rest) {
std::cout << "T, ...\n";
foo(rest...);
}
template <typename... Rest>
void foo(char *p, Rest... rest) {
std::cout << "char*, ...\n";
foo(rest...);
}
template <int N, typename... Rest>
void foo(char (&first)[N], Rest... rest) {
std::cout << "char[], ...\n";
foo(rest...);
}
int main() {
char a[2], b[2], c[2];
foo(a, b, c);
}
...输出:
char[], ...
char*, ...
char*, ...
empty
如您所见,第一次调用转到基于数组的重载,但随后的调用转到基于指针的重载。 有没有办法让所有调用都转到基于数组的重载?
相关:变量模板函数的问题