So übergeben Sie ein Array an eine Funktionsvorlage mit Referenz

7

Ich lerne C ++ Template-Konzepte. Ich verstehe das folgende nicht.

%Vor%

Was ich versuche?

1) T Spaß (T & amp; x)

Hier ist x eine Referenz und daher wird 'a' nicht in Zeigertyp umgewandelt,  aber beim Kompilieren bekomme ich den folgenden Fehler.

%Vor%

Wenn ich nicht referenziere, funktioniert es gut. Nach meinem Verständnis ist das Array in den Zeigertyp zerfallen.

    
Whoami 12.05.2013, 08:06
quelle

2 Antworten

16

C-artige Arrays sind sehr einfache Konstrukte, die nicht zuweisbar, kopierbar oder referenzierbar sind wie Build-Ins oder benutzerdefinierte Typen. Um das Äquivalent zu erhalten, ein Array als Referenz zu übergeben, benötigen Sie die folgende Syntax:

%Vor%

Beachten Sie, dass hier die Größe des Arrays auch ein Template-Parameter ist, damit die Funktion funktioniert, wenn T[M] und T[N] nicht für verschiedene M , N gleich sind. Beachten Sie auch, dass die Funktion void zurückgibt. Es gibt keine Möglichkeit, ein Array nach Wert zurückzugeben, da das Array, wie bereits erwähnt, nicht kopierbar ist.

    
juanchopanza 12.05.2013 08:08
quelle
4

Das Problem liegt im Rückgabetyp: Sie können ein Array nicht zurückgeben, da Arrays nicht kopierbar sind. Und übrigens, du gibst nichts zurück!

Versuchen Sie stattdessen:

%Vor%

Und es wird wie erwartet funktionieren.

HINWEIS: Die ursprüngliche vollständige Fehlermeldung (mit gcc 4.8) lautet tatsächlich:

%Vor%

Die relevanteste Zeile ist die letzte.

    
rodrigo 12.05.2013 08:29
quelle

Tags und Links