C++0x: RValue reference und move constructor

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: C++0x: RValue reference und move constructor

Beitrag von Kerli » Mi Jun 15, 2011 10:34 pm

Xin hat geschrieben:Dort fand ich auch den Switch den man dem Compiler mitgeben muss, um den g++ mit C++0x zu verwenden:
Wenn man nicht die GNU-Erweiterungen verwenden möchte, sondern um Plattformunabhängig zu bleiben nur den Standard dann geht es auch mit

Code: Alles auswählen

-std=c++0x
Verwenden tu ich es bis jetzt nur recht beschränkt. Lambdafunctions verwende ich zum Beispiel bereits. Die sind vor allem in Kombination mit boost.function/boost.bind/boost.signal sehr praktisch.

Ein Beispiel ist die Verwendung als Callback für Tastaturaktionen in meiner Gameengine/Spiel:

Code: Alles auswählen

demo.getInputManager()->connectButtonReleased
    (
      [&](input::PhysicalButton& button)
      {
        static input::Button lighting =
          demo.getInputManager()->getButton("lighting");
        static input::Button load_shader =
          demo.getInputManager()->getButton("load-shader");

        if( lighting.has(button) )
        {
          renderer->setLighting( !renderer->getLighting() );
          std::cout << "Lighting " << (renderer->getLighting() ? "on" : "off") << std::endl;
        }
        else if( load_shader.has(button) )
        {
          std::cout << "Loading shader..." << std::endl;
          vert->loadFromFile("data/shader/instant-grass.vert");
          frag->loadFromFile("data/shader/instant-grass.frag");

          std::cout << "Linking program..." << std::endl;
          program->link();
          program->use();
        }
      }
    );
Die Funktion 'connectButtonReleased' erwartet ein boost::function Objekt, das ich über eine Lambdafunktion direkt inline bereitstellen kann. Dadurch brauch ich nicht extra irgendwo eine Funktion nur für diesen ein Callback definieren. Das '&' besagt das auf alle Variablen im Scope per Referenz zugegriffen werden kann.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Antworten