2015-02-19 12 views
6

następujące klasy obudowuje nazwę OpenGL bufora i udostępnia kilka metod do zmiany stanu bufora:powinienem zadeklarować const metoda, gdy bazowego stan OpenGL jest zmodyfikowaną

class BufferObject { 
    public: 
     explicit BufferObject(GLenum type); 
     virtual ~BufferObject(); 

     // some methods omitted 

     void dataStore(GLsizeiptr size, const GLvoid* data, int usage); 
     void* mapBufferRange(GLintptr offset, GLsizeiptr length, int accessFlag); 
     void unmapBuffer() const; 
    private: 
     GLuint object_; 
}; 

Żadna z tych metod zmień stan obiektu BufferObject, aby wszystkie mogły zostać zadeklarowane za pomocą const. Jednakże, dataStore i mapBufferRange oba wywołują metody OpenGL, które zmieniają stan obiektu na GPU (odpowiednio: glBufferData i glMapBufferRange). Chciałbym zadeklarować je bez const, aby wskazać, że modyfikują stan na GPU.

Jaka jest najlepsza praktyka do naśladowania w tej sytuacji?

+0

[Ta odpowiedź] (http://stackoverflow.com/a/25972249/183120) ma przyzwoite wyjaśnienie na ten temat. – legends2k

Odpowiedz

4

Masz rację, ponieważ nie modyfikują faktycznego stanu obiektu, możesz wybrać.

Chociaż nie ma sztywnej zasady, "używaj const wszędzie, gdzie to możliwe" zdecydowanie nie jest uniwersalną drogą. Zapoznaj się z funkcjami takimi jak std::vector::operator[] —, które nie zmieniają elementów obiektu vector, ale nieruchome zapewniają wersję inną niż const (i inną wersję const).

Jeden dobry sposób patrzenia na to: załóżmy, że masz BufferObject, i przekazujesz go do funkcji, która ma const BufferObject&. Czy to zepsuje twoje oczekiwania (niezmienniki, których oczekujesz), jeśli ta funkcja wywoła dataStore()? Jeśli tak, nie oznaczaj dataStore() jako const.

Aby rozwiązać konkretny przypadek, myślę, że masz rację i powinieneś pozostawić te funkcje innym niż const. Chociaż nie modyfikują fizycznej zawartości obiektu C++, modyfikują stan logiczny encji reprezentowanej przez ten obiekt C++.

+0

usunąłem odpowiedź, ponieważ twoja mówi to samo w dużo lepszych słowach –

Powiązane problemy