Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;将数组创建与函数分离的问题 我开始用C++做一些DirectX编程,我有一个看似愚蠢的问题。 我有一个缓冲区,当前正在使用内联创建的数组: Vertex vertices[]={{...},{...},...};_C++_Arrays_Pointers - Fatal编程技术网

C++;将数组创建与函数分离的问题 我开始用C++做一些DirectX编程,我有一个看似愚蠢的问题。 我有一个缓冲区,当前正在使用内联创建的数组: Vertex vertices[]={{...},{...},...};

C++;将数组创建与函数分离的问题 我开始用C++做一些DirectX编程,我有一个看似愚蠢的问题。 我有一个缓冲区,当前正在使用内联创建的数组: Vertex vertices[]={{...},{...},...};,c++,arrays,pointers,C++,Arrays,Pointers,此数组用作创建缓冲区的资源。我遇到的问题是,我想从函数中检索这个数组,因为我想创建不同的结构,这些结构不是在创建缓冲区的方法中硬编码的。但是,如果我执行类似于Vertex*Vertexs=GetDefaultVertexs()的操作,其中GetDefaultVertexs()的定义是Vertex*GetDefaultVertexs(),并返回上面的结构,则它将无法工作。现在我发现,问题的一部分是,不能在C++中创建一个本地函数数组并返回对它的引用。我的问题是我应该怎么做才能检索这个数组?我能想到

此数组用作创建缓冲区的资源。我遇到的问题是,我想从函数中检索这个数组,因为我想创建不同的结构,这些结构不是在创建缓冲区的方法中硬编码的。但是,如果我执行类似于Vertex*Vertexs=GetDefaultVertexs()的操作,其中GetDefaultVertexs()的定义是Vertex*GetDefaultVertexs(),并返回上面的结构,则它将无法工作。现在我发现,问题的一部分是,不能在C++中创建一个本地函数数组并返回对它的引用。我的问题是我应该怎么做才能检索这个数组?我能想到的唯一一件事是使用带有常量的类,但我想知道一个解决方案,如果可能,它使用函数检索数组。

关于:

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;
}
向量和默认顶点()
{
静态矢量devtx;
如果(devtx.size()==0)
{
//依次声明顶点:
devtx.push_back(顶点(0.1f,0.2f,0.3f));//第一个顶点
devtx.push_back(顶点(0.1f,0.2f,0.3f));//第二个顶点
}
返回devtx;
}
这样你就有了一个顶点向量,它将始终保持不变,并且在内存中创建一次。我不知道这对于多任务处理有多安全(第一次调用时很可能会出现竞速情况,同时从不同线程调用后续调用时也会出现竞速情况)


<>我知道这不是一个好的解决方案,但是它现在应该符合你的需求…

减轻你自己,使用<代码> STD::向量< /代码>。如果你能使用现代C++(当然,返回矢量是便宜的,因为它是一个移动),向量无疑是个好主意。如果不是这种情况,您可以动态分配空间,使其生存时间与作用域分离,例如,通过使用new().typedef struct D3D11_SUBRESOURCE_DATA{const void*psysem;UINT SysMemPitch;UINT SysMemSlicePitch;}D3D11_SUBRESOURCE_DATA;这就是子资源所需要的,特别是psysemvertices@PeterSchneider:不用担心,NRVO是老技术。您可以创建“本地函数数组”并返回指向它的指针或引用,没有问题。不过最好是
静态
,在这种情况下,您可能会遇到可重入性和多线程问题。除非它们是常数。我猜在现代C++中,当声明它时,可以直接用初始化列表初始化它。这也是线程安全的。