我正在用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/