但是要在头文件里定义对应的变量
时间: 2024-11-12 15:45:49 浏览: 5
C语言在头文件中定义const变量详解
如果你想在头文件中声明 `osg::Texture2D` 类型的变量,但又希望实际的实例化延迟到某个作用域内,可以使用 C++11 引入的特性——模板和指针。你可以定义一个指向 `osg::Texture2D` 的指针,然后提供一个工厂函数在需要的时候返回一个新的实例。例如:
```cpp
// 在头文件 TextureManager.h 中
class TextureManager {
public:
template<typename T>
static std::shared_ptr<T> createTexture(const char* name);
private:
// 具体的 Texture2D 实例应该在这里声明,但不会被实例化
std::shared_ptr<osg::Texture2D> m_texture;
};
// 在源文件 TextureManager.cpp 中
template<typename T>
std::shared_ptr<TextureManager::T> TextureManager::createTexture(const char* name) {
return std::make_shared<T>(name);
}
// 使用时:
extern TextureManager manager;
auto texture = manager.createTexture<osg::Texture2D>("image_name");
```
这样做的好处是可以在不需要使用纹理的地方节省内存,并且保持接口的一致性。实际上,在创建 `osg::Texture2D` 时才会有真正的内存分配。
阅读全文