User Tools

Site Tools


cplusplus:goingnative2013

This is an old revision of the document!


Going Native 2013

Herb Sutter had a couple of favorite C++ few-liners. Watch the video here: 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()
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;
}

This one uses the Cinder C++ Library.

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 )
cplusplus/goingnative2013.1378768781.txt.gz · Last modified: 2023/04/12 20:44 (external edit)