我开始使用c ++一段时间来做一些directx编程,而且我有一个看似愚蠢的问题。 我有一个缓冲区,当前正在使用内联创建的数组:
Vertex vertices[]={{...},{...},...};
此数组用作缓冲区创建的资源。我遇到的问题是我想从函数中检索这个数组,因为我想在创建缓冲区的方法中创建不是硬编码的不同结构。但是,如果我执行类似Vertex * vertices = getDefaultVertices()的操作,其中getDefaultVertices()的定义是Vertex * getDefaultVertices()并返回我上面的结构,它将无法工作。现在我发现通过查看问题的一部分是你不能在c ++中创建一个本地函数数组并返回它的引用。我的问题是我该怎么做才能检索这个数组?我唯一能想到的是使用一个带常量的类,但我想知道一个解决方案,如果可能的话,使用函数来检索数组。
答案 0 :(得分:1)
怎么样:
vector<Vertex>& defaultVertices()
{
static vector<Vertex> defVtx;
if(defVtx.size() == 0)
{
// declare your vertices one after the other:
defVtx.push_back(Vertex(0.1f,0.2f,0.3f)); // first Vertex
defVtx.push_back(Vertex(0.1f,0.2f,0.3f)); // second Vertex
}
return defVtx;
}
这样你就有了一个顶点向量,它们将始终相同,并且将在内存中创建一次。我不知道多任务是多么安全(很可能在第一次呼叫时可能存在比赛条件,同时可能会有来自不同线程的后续呼叫)。
我知道这不是一个好的解决方案,但它现在应该符合您的需求......