初始化函数中的静态变量,而不是在文件开始时



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

编辑:我还意识到C 可能想完全避免这种情况,因此我不应该尝试找到一个漏洞。我只是在寻找一种解决方案,该解决方案也可能涉及到目前为止我所做的事情。

您有几种方法

  • 没有静态结构,而是指向结构的静态指针,并在您有上下文初始化它时分配它( 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
}

最新更新