gpt4 book ai didi

c++ - C++编译时自动生成模板类

转载 作者:行者123 更新时间:2023-11-30 00:39:52 29 4
gpt4 key购买 nike

我有一个名为 DynamicTexture 的类,它接受纹理的 widthheight 作为模板参数。参数用于实例化一个固定大小的表(也是一个模板类)。

在我的例子中,我正在实例化 DynamicTexture 以获取两个宽度/高度的各种幂(因此 2x2、4x4、8x8、16x16、32x32 等一直到 4096x4096)。这意味着我有很多这样的声明:

DynamicTexture<2, 2>       dTexture2;
DynamicTexture<4, 4> dTexture4;
...
DynamicTexture<4096, 4096> dTexture4096;

现在的问题是,我能否以某种方式使该过程自动化?此外,我通过查询 unsigned int 类型的变量(显示用户选择的当前大小)然后显示纹理来选择近似的 dTexture:

if (currTexSize == 2) dTexture2->show();
else if (currTexSize == 4) dTexture4->show();
...
else { dTexture4096->show(); }

同样,有什么方法可以避免长长的 if 语句列表?

注意:我不确定如何用这个特定问题的标题来表达。请随意重新措辞。

最佳答案

Now the question is, can I automate that process somehow?

您可以使用一些高级元编程技巧来实现:

template< int Width, int Height >
struct textures_holder
: textures_holder< Width * 2, Height * 2 >
{
typedef textures_holder< Width * 2, Height * 2 > base_t;

void show( int currTexSize ) const
{
if( currTexSize == Width ) // or is it == Height?
_texture->show();
else
base_t::show( currTexSize );
}

DynamicTexture< Width, Height > _texture;
};

template<>
struct textures_holder< 4096, 4096 >
{
void show( int currTexSize ) const
{
_texture->show();
}
};

那么您将创建一个类型为 textures_holder< 1, 1 > 的对象并为每个 2 维的幂得到一个变量,直到 4096。

关于c++ - C++编译时自动生成模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7745684/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com