Ich habe eine Anwendung zweimal erstellt: einmal in Visual Studio und ein anderes Mal in XCode. Eine der Bibliotheken, die ich verwendet habe, GLFW, ermöglicht es Ihnen, die glfwSetWindowSizeCallback
-Funktion zum Erkennen der Größenänderung des Fensters zu verwenden.Wie deklariert statische C++ - Funktion als Freund auf OSX
Meine Fensterklasse, Window
, hat zwei private Mitglieder, Breite und Höhe. Und nach dem Aufruf meines Rückrufs, window_size_callback
, wollte ich die Werte der Breite und Höhe aktualisiert werden. Allerdings wollte ich dies ohne den Einsatz von Setter tun.
Also habe ich window_size_callback
einen statischen Freund gemacht. Diese Lösung funktionierte im Visual Studio-Compiler einwandfrei. XCode gab jedoch einen Fehler zurück: "statisch" ist in Freundesdeklarationen ungültig.
window_size_callback
:
void window_size_callback(GLFWwindow* window, int width, int height) {
Window* win = (Window*)glfwGetWindowUserPointer(window);
win->width = width;
win->height = height;
}
glfwGetWindowUserPointer
wird verwendet, um das aktuelle Fenster Instanz von außerhalb der Klasse zu erhalten.
Header-Datei:
#include <GLFW/glfw3.h>
class Window {
private:
int m_width;
int m_height;
private:
friend static void window_size_callback(GLFWwindow* window, int width, int height);
}
Ohne den Freund Stichwort, window_size_callback
ist nicht in der Lage, diese Elemente zuzugreifen.
Warum ist VS mit diesem und XCode nicht in Ordnung?
Und, wie kann ich das ohne Setter umgehen?
Was ist der Sinn eines statischen Freundes? Freund-Funktionen gehören sowieso nicht zur Klasse ... Auch ein Code-Segment sagt mehr als tausend Worte. – DeiDei
Es muss ein Freund sein, um die privaten Mitglieder meiner Klasse zu ändern, wenn das Fenster in der Größe geändert wird @DeiDei –
Dann machen Sie es Freund, aber warum muss es statisch sein? – DeiDei