Jeśli czujesz oszukiwania:
typedef int(*PtrToArray)[5];
PtrToArray function();
int i = function;
Kompilacja że na gcc plonów: invalid conversion from 'int (*(*)())[5]' to 'int'
. Pierwszy bit to rodzaj, którego szukasz.
Oczywiście, kiedy już masz swój typ PtrToArray
, całe ćwiczenie staje się bardziej banalne, ale czasami jest to przydatne, jeśli masz już nazwę funkcji i musisz ją gdzieś trzymać. I z jakiegokolwiek powodu nie można polegać na oszustwie szablonów, aby ukryć przed tobą krwawe szczegóły.
Jeśli kompilator wspiera go, można też to zrobić:
typedef int(*PtrToArray)[5];
PtrToArray function();
template<typename T> void print(T) {
cout << __PRETTY_FUNCTION__ << endl;
}
print(function);
, które w mojej skrzynce komputerowej, produkuje void function(T) [with T = int (* (*)())[5]]
Będąc w stanie odczytać typów jest dość przydatne, ponieważ zrozumienie błędów kompilatora często zależy od twojej zdolności do określenia, co wszystkie te nawiasy oznaczają. Ale samo ich tworzenie jest mniej przydatne, IMO.
+1 za wiodący tytuł, który sprawił, że mój mózg został ranny! (Plus nazwa: P) – Russell
Prawdopodobnie może to zrobić, ale pamiętaj o spiralnej regule zgodnej z ruchem wskazówek zegara, działa ona w obie strony, po prostu dostosuj kierunek. – jer
Czy funkcja :: function jest czymś, co można zaakceptować? –