Ich habe gerade das Äquivalent im g++ 4.5 C++0x-Modus für char-Arrays ausprobiert und es erlaubt mir nicht, sowohl zu definieren
template void moresilly(const T v[],const char *description)
ALS AUCH
template void moresilly(const T *v,const char *description)
es behauptet, dass beide der gleiche Typ sind.
Ich hatte eine Funktion:
template void silly(const T & v,const char *description)
{
cout<<"Größe von "<
``
Es gibt die Größe eines Arrays richtig an, wenn es übergeben wird, und die eines Zeigers, wenn es übergeben wird, aber ich kann moresilly nicht verwenden, um zwischen Zeiger und Array zu unterscheiden, sodass ich ein 4-zeichiges Array nicht von einem Zeiger auf n-Zeichen unterscheiden kann.
Es könnte funktionieren, sozusagen, Vorlagen für T[1], T[2], T[3] usw. zu haben, aber es gibt bereits einen Beitrag, der besagt, dass verschiedene Compiler das (oder einen ähnlichen Fall) unterschiedlich behandeln und dass GNU eine Übereinstimmung mit einem Zeiger in C++11 bevorzugt.
... später hinzugefügt: Nach einigen Experimenten habe ich etwas gefunden, das in g++ 4.5 funktioniert
template void moresilly(const T (&v)[L],const char *description)
{
cout<void moresilly(const T *v,const char *description)
{
cout<void moresilly(const T v,const char *description)
{
cout<void silly(const T & v,const char *description)
{
cout<<"Größe von "<
`
mit dem folgendes ordnungsgemäß funktioniert
silly("12345","sofortiger String aus 5 Zeichen plus Null");
silly((const char *)"12345","sofortiger konstanter Zeiger auf char von 5 Zeichen plus Null");
char testarray[]="abcdef";
silly(testarray,"Char-Array aus 6 Zeichen plus Null");
const char testarray2[]="abcdefg";
silly(testarray2,"const char-Array aus 7 Zeichen plus Null");
Beachten Sie, dass wenn die erste Funktion mit "const T v[L]" anstelle von "const T (&v)[L]" definiert wird, funktioniert es nicht, es passt nie zu etwas.
Also habe ich dein Problem gelöst, aber erwarte nicht, dass dies in anderen Versionen des Compilers einschließlich zukünftiger funktioniert. Deshalb hasse ich c++. Irgendwie ist die Definition der Sprache so unklar, dass Compiler voller instabiler Grenzfälle sind.
Dies ist jedoch ein nützlicher Trick, den ich vielleicht verwenden werde.
` ``