2014-09-04 81 views
1

我有一个用于OpenGL缓冲区的C++类,它有许多setData()函数来说明缓冲区可能包含的不同类型的数据,例如整型:如何避免使用不同类型C++的多个函数执行相同的操作

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

模板是否工作? – alphacentauri 2014-09-04 16:28:47

+0

不知道如何使用模板我是一个C++新手,我会研究它:) – DomAyre 2014-09-04 16:29:53

回答

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++只会在您使用不兼容类型调用它时发出抱怨。

+0

谢谢!我喜欢互联网有时:) – DomAyre 2014-09-05 08:13:52

+0

啊我在定义这个模板头功能只是添加模板位和更新类型似乎没有工作有点麻烦? – DomAyre 2014-09-05 08:20:39

+0

啊,是的。模板声明vs定义很棘手。我将整个方法移动到头文件中(即用该定义替换头中的声明)。 – 2014-09-05 08:39:16

相关问题