ich hab grad mal bisschen rumprobiert:
template <class T, int size>
int f(T (&x)[size])
{
return size;
}
template <class T, int size, int size2>
int f2(T (&x)[size][size2])
{
int maxsize = 0;
for (int i = size; i; i--)
maxsize += f(x[i]);
return maxsize;
}
int main(int argc, char* argv[])
{
int na[] = {1,2,3,4};
std::cout<<f(na)<<std::endl;
int na2[] = {1,2,3,4,5,6,7};
std::cout<<f(na2)<<std::endl;
char ca[] = "test";
std::cout<<f(ca)<<std::endl;
int na3[2][3];
na3[0][0] = 0;
na3[0][1] = 1;
na3[0][2] = 2;
na3[1][0] = 0;
na3[1][1] = 1;
na3[1][2] = 2;
std::cout<<f2(na3)<<std::endl;
Sleep(3000);
return 0;
}
Muss sagen, klappt gut. Sogar das Zeichenkettenendekennzeichen hat es beim String mitgezählt.