我有一个模板函数bar,它将一个数组引用作为参数.我想接受参数并将其传递给另一个函数,但只有在将数组的大小减小一个并跳过数组的第一个元素之后.
#include <iostream>
template <typename T>
void foo(const T& t)
{
std::cout << sizeof(t) << std::endl;
std::cout << t[0] << std::endl;
}
template <typename T>
void bar(const T& t)
{
std::cout << sizeof(t) << std::endl;
std::cout << t[0] << std::endl;
foo(t); // Magic is desired here!
}
int main()
{
char array[] = "ABCD";
bar(array);
}
Run Code Online (Sandbox Code Playgroud)
以上打印出:
5
A
5
A
Run Code Online (Sandbox Code Playgroud)
我想打印出来:
5
A
4
B
Run Code Online (Sandbox Code Playgroud)
您可以使用两个模板参数执行此操作,一个用于数组类型,另一个用于数组大小.
template <typename T, int N>
void bar(const T (&t)[N])
{
// ...
foo(reinterpret_cast<const T(&)[N-1]>(t[1]));
}
Run Code Online (Sandbox Code Playgroud)