Si vous vous sentez comme de la tricherie:
typedef int(*PtrToArray)[5];
PtrToArray function();
int i = function;
que sur les rendements Compiler gcc: invalid conversion from 'int (*(*)())[5]' to 'int'
. Le premier bit est le type que vous recherchez. Bien sûr, une fois que vous avez votre PtrToArray
typedef, tout l'exercice devient plutôt trivial, mais parfois cela devient pratique si vous avez déjà le nom de la fonction et vous avez juste besoin de le coller quelque part. Et, pour une raison quelconque, vous ne pouvez pas compter sur la supercherie de gabarit pour cacher les détails sanglants de vous.
Si votre compilateur prend en charge, vous pouvez aussi le faire:
typedef int(*PtrToArray)[5];
PtrToArray function();
template<typename T> void print(T) {
cout << __PRETTY_FUNCTION__ << endl;
}
print(function);
qui, sur ma boîte informatique, produit void function(T) [with T = int (* (*)())[5]]
Être capable de lire les types est très utile, car la compréhension des erreurs du compilateur dépend souvent de votre capacité à comprendre ce que signifient toutes ces parenthèses. Mais les rendre vous-même est moins utile, IMO.
+1 pour le titre de tête qui m'a fait mal au cerveau! (Plus le nom: P) – Russell
Pourrait probablement faire une réponse, mais rappelez-vous la règle en spirale dans le sens des aiguilles d'une montre, cela fonctionne dans les deux sens, juste ajuster pour la direction. – jer
Est-ce que boost :: function quelque chose que vous accepteriez? –