Я создал приложение дважды: один раз в Visual Studio и еще раз в XCode. Одна из библиотек, которые я использовал, GLFW, позволяет использовать функцию glfwSetWindowSizeCallback
для определения изменения размера окна.Как объявить статическую функцию C++ как друга в OSX
Мой класс окна, Window
, имеет два частных члена, ширину и высоту. И после вызова моего обратного вызова, window_size_callback
, я хотел, чтобы значения ширины и высоты были обновлены. Однако я хотел сделать это без использования сеттеров.
Итак, я сделал window_size_callback
статическим другом. Это решение отлично работало в компиляторе Visual Studio; однако XCode возвратил ошибку: «static» недействителен в объявлениях друзей.
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
используется для получения текущего экземпляра окна из-за пределов класса.
заголовок файл:
#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);
}
Без друга ключевого слова, window_size_callback
не в состоянии получить доступ к этим членам.
Почему VS отлично с этим и XCode нет?
И как я могу обойти это без использования сеттеров?
Какой смысл статического друга? Друг-функции в любом случае не являются частью класса ... Также сегмент кода стоит тысячи слов. – DeiDei
Он должен быть другом, чтобы изменить закрытых членов моего класса при изменении размера окна @DeiDei –
Затем сделайте его другом, но зачем он должен быть статичным? – DeiDei