模板化成员变量的值

Template the value of a member variable

本文关键字:变量 成员      更新时间:2023-10-16

考虑以下两个类:

Struct Gray
{
const int data_size = 32*32;
int width;
int height;
uint8_t data[data_size ]
}
Struct color
{
const int data_size = 32*32*3;
int width;
int height;
uint8_t data[data_size ]
}

我想将这两个类合并为一个模板类。

我如何编写这样一个模板类,将data_size的值作为模板参数,类似于template<int data_size> struct?我们实际上在 c++ 中是否将模板用于此类目的?我知道模板用于棘手的变量类型,但从未见过变量值的用例。

你可以写一些形式的东西

template<int size>
struct Foo
{
    // ToDo - other members here
    uint8_t data[size];
};
typedef Foo<32*32> Gray;
typedef Foo<32*32*3> color;

请注意,Graycolor是完全不同的类型。因此,这种模式并不经常使用。一种扩展是使用非模板基类来Foo heightwidth成员。但是,除非您确实需要模板提供的编译时功能,并且不想使用另一种替代方法constexpr否则常规运行时多态性可能是最适合大多数目的的。

是的

,这是模板的一种用途:

template<int size>
struct color
{
    int width;
    int height;
    uint8_t data[size];
};

模板参数可以是类,但它们也可以是一些简单的值,如 int。