模板化成员变量的值
Template the value of a member variable
考虑以下两个类:
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;
但请注意,Gray
和color
是完全不同的类型。因此,这种模式并不经常使用。一种扩展是使用非模板基类来Foo
height
和width
成员。但是,除非您确实需要模板提供的编译时功能,并且不想使用另一种替代方法constexpr
否则常规运行时多态性可能是最适合大多数目的的。
是的
,这是模板的一种用途:
template<int size>
struct color
{
int width;
int height;
uint8_t data[size];
};
模板参数可以是类,但它们也可以是一些简单的值,如 int。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- C++预处理会生成变量成员、资源库和映射
- 局部堆栈变量成员的返回值优化
- Google Mock:在目标类的构造函数中实例化的模拟私有变量成员
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 如果派生类仅包含自动变量成员,是否有必要具有虚拟驱动器
- 线程安全性和静态变量/成员功能
- "static const char array"可以在 C 语言上包含变量成员吗
- 仅用于内部目的的类的所有变量/成员的技术术语是什么
- 如何强制转换变量成员以将其作为函数的引用参数传递
- 类中未声明变量成员函数
- 在 main 中初始化类的 "static const" 类型变量成员的更好方法
- c++模板类静态const变量成员作为映射键给出未定义引用
- 在类中初始化结构变量成员会导致分割错误
- 在c++中建模变量成员类型
- 模板私有静态变量成员的未定义符号
- 不能访问公共静态变量成员
- 常量变量成员在C++有什么用?
- g++ 4.8.2坚持简单变量成员是数组