在函数而非文件开头中初始化静态变量

时间:2019-03-03 11:29:25

标签: c++ opengl static

我是C ++的新手,偶然发现了以下问题:我有一个带有全静态成员的结构,该结构将模型加载到VAO和VBO(OpenGL)。我想创建一个常量静态对象,该对象存储呈现VAO所需的信息(注意:常量在这里不是问题)。这里的问题是,我必须等待OpenGL上下文的创建,并且之后只能调用loading函数(我的想法是一个init()函数),但是所有静态变量都必须直接声明! (我也尝试过使用非静态成员创建结构,而只是创建该结构的静态实例,但仍必须在构造函数中定义模型)。任何帮助都会很棒!

编辑:我也意识到C ++可能想完全避免这种情况,所以我不应该试图寻找漏洞。我只是在寻找一种解决方案,该解决方案还可能涉及彻底重组到目前为止已完成的工作。

1 个答案:

答案 0 :(得分:0)

您有几种方法

  • 没有静态结构,而是指向结构的静态指针,并在有上下文对其进行初始化时分配它(在下面的示例中为 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
}