Mantieni non const.
Suppongo che per gli utenti di ShaderWrapper
l'oggetto OpenGL sottostante sia un dettaglio di implementazione di cui non hanno bisogno e che vogliono essere interessati. Quindi dal punto di vista dell'utente setFloat()
fa cambia lo stato osservabile di un oggetto ShaderWrapper
. Ecco perché non dovrebbe essere const
anche se tecnicamente potrebbe essere.
Dove dovresti prendere in considerazione la costanza è il parametro name
. Qualche ragione particolare per cui non può essere un const char*
? Non sembra che il char array venga modificato ovunque, quindi const
sembra appropriato. Ti permetterebbe anche di passare una stringa letterale a setFloat()
, che al momento è impossibile.
Spunti di riflessione
(con l'avvertenza che non conosco affatto OpenGL)
Mi sembra che quello che ti interessa davvero è una combinazione di uno shader e di qualche proprietà con nome, perché è l'entità su cui lavori effettivamente.
Potresti introdurre una Location
di conseguenza e cambiare ShaderWrapper
in modo che lo scopo sia di essere un gestore risorse per un oggetto shader OpenGL e una fabbrica per oggetti Location
. Per il vero lavoro, allora hai funzioni indipendenti che prendono come parametro un Location&
o const Location&
.
È un po 'come l'approccio container più iteratore in quel Location
oggetti "index" in uno shader e vengono invalidati una volta che il loro ShaderWrapper
muore. Ovviamente questo crea il problema degli oggetti Location
che pendono possibilmente. Quindi forse un ShaderID
deve diventare una cosa simile a shared_ptr
che gestisce la proprietà condivisa e uccide l'oggetto OpenGL quando muore l'ultimo Location
.
Ovviamente tutto ciò è solo un ruvido giro di brainstorming. Il punto è: vedo qui la tentazione di creare una "classe di Dio" e l'opportunità di resistere a quella tentazione e creare un design possibilmente più elegante, più sicuro e più facile da usare che combini diversi piccoli pezzi con scopi ben specifici. O alla fine avrai capito esattamente perché vuoi quella grande e potente singola classe in questa situazione.