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

问题描述 投票:0回答:1

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

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

c++ opengl static
1个回答
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
}
© www.soinside.com 2019 - 2024. All rights reserved.