Gewusst wie: array an Funktion template mit Referenz
Lerne ich c++ template-Konzepte. Ich verstehe nicht die folgenden.
#include <iostream>
#include <typeinfo>
using namespace std;
template <typename T>
T fun(T& x)
{
cout <<" X is "<<x;
cout <<"Type id is "<<typeid(x).name()<<endl;
}
int main ( int argc, char ** argv)
{
int a[100];
fun (a);
}
Was ich versuche?
1) T Spaß (T & x)
Hier x ist eine Referenz, und somit nicht morsch 'a' in Zeiger-Typ,
aber beim kompilieren bekomme ich den folgenden Fehler.
error: no matching function for call to ‘fun(int [100])’
Wenn ich versuche nicht-Referenz, es funktioniert gut. Wie ich es verstehe, wird das array verfallen in Zeiger-Typ.
Du musst angemeldet sein, um einen Kommentar abzugeben.
C-style-arrays sind sehr grundlegende Konstrukte, die sind nicht übertragbar, kopierbar oder referenzierbaren in der Art gebaut-ins oder benutzerdefinierte Typen sind. Zu erreichen ist das äquivalent der übergabe eines Arrays als Verweis, müssen Sie die folgende syntax:
Beachten Sie, dass hier die Größe des Arrays ist auch eine template-parameter, damit die Funktion ausgeführt, werden alle array-Größen, da
T[M]
undT[N]
sind nicht vom gleichen Typ sind für verschiedeneM
,N
. Beachten Sie auch, dass die Funktion, die void zurückgibt. Es gibt keine Möglichkeit der Rückgabe eines Arrays durch Wert, da das array nicht kopierbar, wie bereits erwähnt.N
hat das array die Länge.Das problem ist in der return-Typ: Sie können ein array zurückgeben, da arrays sind nicht kopierbar. Und by the way, sind Sie wieder nichts!
Versuchen, statt:
Und es funktioniert wie erwartet.
HINWEIS: die ursprünglichen, vollständigen Fehlermeldung (mit gcc-4.8) eigentlich ist:
Die relevante Zeile ist die Letzte.
(¶m)[N]
ist überflüssig, es sei denn, Sie brauchen, um zu findenN
im Körper vonf
(obwohl dies kann auch abgeleitet werden, sobald Sie den Typ)