2014-09-04 86 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

相關問題