我有一个用于OpenGL缓冲区的C ++类,它有许多setData()
函数来说明缓冲区可以包含的不同类型的数据,例如:ints:
void Buffer::setData(int* data)
{
//Bind the buffer
bind();
//Input the data into the buffer based on the type
glBufferData(type, sizeof(int) * size, data, GL_DYNAMIC_DRAW);
}
对于每个版本的函数都是一样的,只有更改的是sizeof(int)
成为sizeof(<other type>)
我想知道是否有办法解决这个问题?我考虑过的一种可能性是泛型变量,例如var?我知道var本身并不存在于C ++中但是有一些等价的吗?
答案 0 :(得分:8)
模板功能可能会很好地为您服务。方法:
template< typename T > void Buffer::setData(T data)
{
//Bind the buffer
bind();
//Input the data into the buffer based on the type
glBufferData(type, sizeof(T) * size, data, GL_DYNAMIC_DRAW);
}
定义了一系列方法,每种类型T
一个。当然,对于所有类型T
,它实际上可能不会工作,但幸运的是,只有当您使用不兼容的类型调用它时,C ++才会抱怨。