User Tools

Site Tools


cplusplus:goingnative2013
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


Next revision
cplusplus:goingnative2013 [2013/09/09 16:19] – created dblume
Line 1: Line 1:
 +====== Going Native 2013 ======
  
 +Herb Sutter had a couple of favorite C++ few-liners. Watch the video here: [[http://channel9.msdn.com/Events/GoingNative/2013/My-Favorite-Cpp-10-Liner|My Favorite C++ 10-liner]].
 +
 +A complete reference-counted object cache.
 +
 +From C++98 it uses map operator[]'s auto-insertion.
 +
 +From C++11 it uses:
 +  * auto
 +  * mutex, lock_guard
 +  * Thread-safe fn statics
 +  * shared_ptr and weak_ptr
 +  * Thread-safe.lock()
 +
 +<file cpp widget_cache.cpp>
 +shared_ptr<widget> get_widget( int id ) {
 +    static map< int, weak_ptr<widget> > cache;
 +    static mutex m;
 +
 +    lock_guard<mutex> hold(m);
 +    auto sp = cache[id].lock();    // cache[id] returns a weak_ptr. lock() returns the shared_ptr
 +    if( !sp )
 +        cache[id] = sp = load_widget(id);
 +    return sp;
 +}
 +</file>
 +
 +This one uses the **[[http://libcinder.org/|Cinder C++ Library]]**.
 +
 +<file cpp gui_app.cpp>
 +#include "cinder/app/AppBasic.h"
 +#include "cinder/dx/dx.h"
 +#include <vector>
 +using namespace ci;
 +using namespace ci::app;
 +
 +class MyApp:public AppBasic {
 +    std::vector< Vec2f > points;
 +public:
 +    void mouseDrag( MouseEvent e ) {
 +        points.push_back( e.getPos() );
 +    }
 +    
 +    void draw() {
 +        dx::clear( Color( 0.1f, 0.1f, 0.15f ) );
 +        dx::color( 1.0f, 0.5f, 0.25f );
 +        dx::begin( GL_LINE_STRIP );
 +        for( auto& e: points )
 +          dx::vertex( e );
 +        dx::end();
 +    }
 +};
 +
 +CINDER_APP_BASIC( MyApp, RendererDx )
 +</file>
cplusplus/goingnative2013.txt · Last modified: 2023/04/12 20:44 by 127.0.0.1