Инициализация статических переменных в функции, а не в начале файла - PullRequest
0 голосов
/ 03 марта 2019

Я довольно новичок в C ++ и наткнулся на следующую проблему: у меня есть структура со полностью статическими членами, которая загружает модели в VAO и VBO (OpenGL).Я хочу создать постоянный статический объект, который хранит информацию, необходимую для визуализации VAO (Примечание: константа здесь не проблема).Проблема здесь в том, что мне приходится ждать, пока будет создан контекст OpenGL, и я могу только потом вызывать функцию загрузки (моя идея была init() функцией), но все статические переменные должны быть объявлены напрямую!(Я также попытался создать структуру с нестатическими членами и просто создать статическую реализацию этой структуры, но модель все еще должна быть определена в конструкторе).Любая помощь была бы отличной!

РЕДАКТИРОВАТЬ: Я также понял, что C ++, вероятно, хочет избежать этого в целом, поэтому я не должен пытаться найти лазейку.Я просто ищу решение, которое также может включать в себя полную реструктуризацию того, что я сделал до сих пор.

1 Ответ

0 голосов
/ 03 марта 2019

У вас есть несколько способов сделать

  • , чтобы иметь не статическую структуру, а статический указатель на структуру, и выделить ее, когда у вас есть контекст для ее инициализации ( S1 *G1 в моем примере ниже)
  • для обновления структуры, когда у вас есть контекст для выполнения ( S2 G2 в примере ниже)

Пример:

#include <iostream>

struct S1 {
  S1(int v) : _v(v) {}
  int _v;
};

struct S2 {
  int _v;

  void set(int v) { _v = v; }
};

const S1 * G1;
S2 G2;

int main()
{
  int v;

  std::cin >> v;

  // now we are able to set the structs

  G1 = new S1(v);
  G2.set(v); // note G2._c is public and can be set directly too

  // etc
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...