如何避免使用不同类型的C ++执行相同操作的多个函数

时间:2014-09-04 16:27:14

标签: c++

我有一个用于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 ++中但是有一些等价的吗?

1 个答案:

答案 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 ++才会抱怨。