我正在用DirectX构建一个非常基本的对象加载器,我决定将其逻辑与程序的主要部分分开,并将其放入自己的类中(可能应该如此)。

我遇到的问题是,加载程序需要访问某些MainWindow变量(例如DX11 SwapChain)来处理用于帧渲染的后缓冲。

我是C++的新手,所以不确定在这里是否有效利用指针,但是如果有人可以告诉我我在做什么是错误的,或者建议一种更有效的处理方式,这将对您大有帮助。问题。

主视窗:

// Global variables
IDXGISwapChain* g_swapChain;  // Pointer to global swap chain

// Obj loader init example - pass the reference of global swap chain?
ObjectLoader l( &g_swapChain );

// Condensed method call as you don't need to see all parameters
loader.__loadModel("model.obj");

现在,在我的ObjectLoader类中,我将设置哪种指针以便能够不断引用我的主Windows g_swapChain?我是否正确地认为应该使用双指针,例如,封装的类global是对该双指针的引用。
private:
IDXGISwapChain& loader_swapChain;

public:
ObjectLoader::ObjectLoader( IDXGISwapChain** swapChain )
{
     loader_swapChain = swapChain;
}

下面的示例演示了在哪里需要使用MainWindow的swapchain。
ObjectLoader::__loadModel(std::string fielname)
{
     if (modelLoaded)
           ...
     else {
          // this is an example of where I want to use the swap chain in MainWindow
          loader_swapChain->SetFullscreenState(false, NULL);
     }
}

来自Java背景,这些指针使我头疼-希望我要问的是有道理的,如果没有请问,我将提供更多信息。

最佳答案

您混合引用和指针,它将无法编译。

我认为指针并不是真正需要的。

您可以像这样引用:

private:
ID3D11SwapChain& loader_swapChain;

public:
ObjectLoader::ObjectLoader( ID3D11SwapChain& swapChain ) : loader_swapChain( swapChain )
{
}

或者如果您想使用指针:
private:
ID3D11SwapChain* loader_swapChain;

public:
ObjectLoader::ObjectLoader( ID3D11SwapChain* swapChain ) : loader_swapChain( swapChain )
{
}

编辑

如果含义是在初始化后更改全局指针,则可以使用指向指针的解决方案。

指针版本的指针:
private:
ID3D11SwapChain** loader_swapChain;

public:
ObjectLoader::ObjectLoader( ID3D11SwapChain** swapChain ) : loader_swapChain( swapChain )
{
}

请注意,全局变量不是很好的解决方案,最好使用单例。

关于c++ - 我是C++误解了输出参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27908658/

10-11 16:27