매개 변수 팩에서 확장 된 인수에서 배열 대 포인터 감쇠를 방지 할 수 있습니까? 예를 들어매개 변수 팩 확장에서 배열 감쇠 방지
:
#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
당신이 볼 수 있듯이, 첫 번째 통화는 어레이 기반의 과부하로 이동하지만, 후속 호출은 포인터 타입으로 이동 기반 과부하. 모든 호출을 배열 기반 과부하로 전환 할 수있는 방법이 있습니까?
관련 : Problems specializing variable template function
'std :: forward (rest) ...'? – Yakk