an oddysey in c++ · an oddysey in c++ a guided tour of modern c++ per karlström [email protected]...

107
An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström [email protected] Upplysningen 2010-03-02 Background Templates STL Boost C++0x More Reading Q&A

Upload: others

Post on 22-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

An Oddysey in C++A Guided Tour of Modern C++

Per Karlströ[email protected]

Upplysningen 2010-03-02

Background Templates STL Boost C++0x More Reading Q&A

Page 2: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

From C to C++

Bjarne StroustrupFather of C++

1979: Development starts1998: ISO/IEC 14882:19982003: ISO/IEC 14882:20032005: TR1

Background Templates STL Boost C++0x More Reading Q&A

Page 3: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

From C to C++

Bjarne StroustrupFather of C++

1979: Development starts1998: ISO/IEC 14882:19982003: ISO/IEC 14882:20032005: TR1

Background Templates STL Boost C++0x More Reading Q&A

Page 4: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

From C to C++

Bjarne StroustrupFather of C++

1979: Development starts1998: ISO/IEC 14882:19982003: ISO/IEC 14882:20032005: TR1

Background Templates STL Boost C++0x More Reading Q&A

Page 5: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

From C to C++

Bjarne StroustrupFather of C++

1979: Development starts1998: ISO/IEC 14882:19982003: ISO/IEC 14882:20032005: TR1

Background Templates STL Boost C++0x More Reading Q&A

Page 6: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

From C to C++

Bjarne StroustrupFather of C++

1979: Development starts1998: ISO/IEC 14882:19982003: ISO/IEC 14882:20032005: TR1

Background Templates STL Boost C++0x More Reading Q&A

Page 7: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Current State of C++

http://langpop.com/

Background Templates STL Boost C++0x More Reading Q&A

Page 8: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Hello Template World

template<typename T>...

Background Templates STL Boost C++0x More Reading Q&A

Page 9: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Complex Numbers

class Complex{float re,im;

public:...const float& re() const;const float& im() const;

};

Background Templates STL Boost C++0x More Reading Q&A

Page 10: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Complex Template Numbers

template<typename T>class Complex{T re,im;

public:...const T& re() const;const T& im() const;

};

Background Templates STL Boost C++0x More Reading Q&A

Page 11: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Advanced Template Techniques

Template specializationTemplate template argumentsSFINAE

Background Templates STL Boost C++0x More Reading Q&A

Page 12: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Advanced Template Techniques

Template specializationTemplate template argumentsSFINAE

Background Templates STL Boost C++0x More Reading Q&A

Page 13: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Advanced Template Techniques

Template specializationTemplate template argumentsSFINAE

Background Templates STL Boost C++0x More Reading Q&A

Page 14: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Standard Template Library (STL)

ContainersIteratorsAlgorithmsFunctors

Background Templates STL Boost C++0x More Reading Q&A

Page 15: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Standard Template Library (STL)

ContainersIteratorsAlgorithmsFunctors

Background Templates STL Boost C++0x More Reading Q&A

Page 16: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Standard Template Library (STL)

ContainersIteratorsAlgorithmsFunctors

Background Templates STL Boost C++0x More Reading Q&A

Page 17: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Standard Template Library (STL)

ContainersIteratorsAlgorithmsFunctors

Background Templates STL Boost C++0x More Reading Q&A

Page 18: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Containers

[1]

Background Templates STL Boost C++0x More Reading Q&A

Page 19: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

List

Background Templates STL Boost C++0x More Reading Q&A

Page 20: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Vector

Background Templates STL Boost C++0x More Reading Q&A

Page 21: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Map

Background Templates STL Boost C++0x More Reading Q&A

Page 22: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

String

#include <string>...std::string better_than_charp("hello string");

typedef std::basic_string<char> string;

Background Templates STL Boost C++0x More Reading Q&A

Page 23: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

String

#include <string>...std::string better_than_charp("hello string");

typedef std::basic_string<char> string;

Background Templates STL Boost C++0x More Reading Q&A

Page 24: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Containers

DequeStackQueueMultimapSet, Multiset

Background Templates STL Boost C++0x More Reading Q&A

Page 25: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Iterators

Different types of IteratorsTrivialInputOutputForwardBidirectionalRandom Access

Background Templates STL Boost C++0x More Reading Q&A

Page 26: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Iterators

Different types of IteratorsTrivialInputOutputForwardBidirectionalRandom Access

Background Templates STL Boost C++0x More Reading Q&A

Page 27: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Iterators

Different types of IteratorsTrivialInputOutputForwardBidirectionalRandom Access

Background Templates STL Boost C++0x More Reading Q&A

Page 28: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Iterators

Different types of IteratorsTrivialInputOutputForwardBidirectionalRandom Access

Background Templates STL Boost C++0x More Reading Q&A

Page 29: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Iterators

Different types of IteratorsTrivialInputOutputForwardBidirectionalRandom Access

Background Templates STL Boost C++0x More Reading Q&A

Page 30: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Iterators

Different types of IteratorsTrivialInputOutputForwardBidirectionalRandom Access

Background Templates STL Boost C++0x More Reading Q&A

Page 31: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Algorithms for STL Containers

Non mutatingFor eachFind...

MutatingCopyTransform...

SortingSortBinary searchHeap operations...

Numeric

Background Templates STL Boost C++0x More Reading Q&A

Page 32: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Algorithms for STL Containers

Non mutatingFor eachFind...

MutatingCopyTransform...

SortingSortBinary searchHeap operations...

Numeric

Background Templates STL Boost C++0x More Reading Q&A

Page 33: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Algorithms for STL Containers

Non mutatingFor eachFind...

MutatingCopyTransform...

SortingSortBinary searchHeap operations...

Numeric

Background Templates STL Boost C++0x More Reading Q&A

Page 34: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Algorithms for STL Containers

Non mutatingFor eachFind...

MutatingCopyTransform...

SortingSortBinary searchHeap operations...

Numeric

Background Templates STL Boost C++0x More Reading Q&A

Page 35: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

For each

ExampleSTL for each...

Background Templates STL Boost C++0x More Reading Q&A

Page 36: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

For each

ExampleSTL for each...

Background Templates STL Boost C++0x More Reading Q&A

Page 37: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Copy

ExampleSTL copy...

Background Templates STL Boost C++0x More Reading Q&A

Page 38: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Copy

ExampleSTL copy...

Background Templates STL Boost C++0x More Reading Q&A

Page 39: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Transform

ExampleSTL transform...

Background Templates STL Boost C++0x More Reading Q&A

Page 40: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Transform

ExampleSTL transform...

Background Templates STL Boost C++0x More Reading Q&A

Page 41: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Sort

ExampleSTL sort...

Background Templates STL Boost C++0x More Reading Q&A

Page 42: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Sort

ExampleSTL sort...

Background Templates STL Boost C++0x More Reading Q&A

Page 43: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost

“...one of the most highly regarded and expertly designed C++library projects in the world.”— —Herb Sutter and Andrei Alexandrescu, C++ CodingStandards

Initial proposal 1998 by Beman G. Daves16 804 806 LOC5293 Person Years$291 133 309

Background Templates STL Boost C++0x More Reading Q&A

Page 44: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost

“...one of the most highly regarded and expertly designed C++library projects in the world.”— —Herb Sutter and Andrei Alexandrescu, C++ CodingStandards

Initial proposal 1998 by Beman G. Daves16 804 806 LOC5293 Person Years$291 133 309

Background Templates STL Boost C++0x More Reading Q&A

Page 45: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost

“...one of the most highly regarded and expertly designed C++library projects in the world.”— —Herb Sutter and Andrei Alexandrescu, C++ CodingStandards

Initial proposal 1998 by Beman G. Daves16 804 806 LOC5293 Person Years$291 133 309

Background Templates STL Boost C++0x More Reading Q&A

Page 46: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost

“...one of the most highly regarded and expertly designed C++library projects in the world.”— —Herb Sutter and Andrei Alexandrescu, C++ CodingStandards

Initial proposal 1998 by Beman G. Daves16 804 806 LOC5293 Person Years$291 133 309

Background Templates STL Boost C++0x More Reading Q&A

Page 47: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost

“...one of the most highly regarded and expertly designed C++library projects in the world.”— —Herb Sutter and Andrei Alexandrescu, C++ CodingStandards

Initial proposal 1998 by Beman G. Daves16 804 806 LOC5293 Person Years$291 133 309

Background Templates STL Boost C++0x More Reading Q&A

Page 48: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

BOOST_FOREACH

ExampleBoost for each...

Background Templates STL Boost C++0x More Reading Q&A

Page 49: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

BOOST_FOREACH

ExampleBoost for each...

Background Templates STL Boost C++0x More Reading Q&A

Page 50: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost Graph Library

GI port: dat_i C[0(0):0(0)]C[0(0):0(0)]

__MUX_1__[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[1]{}=={}

GI port: op_i C[1(1):0(0)]C[1(1):0(0)]

port_i: instr_i(1) [(#)-1(*):0(0)]

[(#)-1(*):0(0)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

GO port: dat_o C[0(0):0(0)]C[0(0):0(0)]

FU: offset(offset)

port_o: dat_o C[0(0):0(0)]C[0(0):0(0)]

OFS: 1

offset

port_i: ctrl_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

port_i: dat_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

op0 [3,3]op1 [2,2]([(*):(*)])unnamed

[0]{}=={}

DECODERdec_unit(dec_unit)

port_o: __MUX_0__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: __MUX_1__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: offset_ctrl_i C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: oc_i C[1(1):0(0)]C[1(1):0(0)]

dec_unit

port_i: flush_it_i(1) C[0(0):0(0)]

C[0(0):0(0)]

dec_unit

dec_unit

FU: {(1'd0)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd0)}_0

__MUX_0__[(*):(*)]

op0 [1,1]([(*):(*)])unnamed

[0]{}=={}

FU: {(1'd1)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd1)}_0

op1 [1,1]([(*):(*)])unnamed

[1]{}=={}

MUX_ctrl port: __MUX_0___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_0__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

MUX_ctrl port: __MUX_1___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_1__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_0__1 | {OpC:1,OpC:2}

[(*):(*)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_1__0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[0]{}=={}

CS_offset_ctrl_i0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

offset_ctrl_i [0,1]([(*):(*)])unnamed

[0]{}=={}

offset_ctrl_i [0,0]([(*):(*)])unnamed

[0]{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

([(*):(*)])Clause Use

[0]{}=={}

{%OP_0 | %OP_1}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

General GraphLibraryGraph I/O withGraphwizGraph Algorithms

Background Templates STL Boost C++0x More Reading Q&A

Page 51: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost Graph Library

GI port: dat_i C[0(0):0(0)]C[0(0):0(0)]

__MUX_1__[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[1]{}=={}

GI port: op_i C[1(1):0(0)]C[1(1):0(0)]

port_i: instr_i(1) [(#)-1(*):0(0)]

[(#)-1(*):0(0)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

GO port: dat_o C[0(0):0(0)]C[0(0):0(0)]

FU: offset(offset)

port_o: dat_o C[0(0):0(0)]C[0(0):0(0)]

OFS: 1

offset

port_i: ctrl_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

port_i: dat_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

op0 [3,3]op1 [2,2]([(*):(*)])unnamed

[0]{}=={}

DECODERdec_unit(dec_unit)

port_o: __MUX_0__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: __MUX_1__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: offset_ctrl_i C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: oc_i C[1(1):0(0)]C[1(1):0(0)]

dec_unit

port_i: flush_it_i(1) C[0(0):0(0)]

C[0(0):0(0)]

dec_unit

dec_unit

FU: {(1'd0)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd0)}_0

__MUX_0__[(*):(*)]

op0 [1,1]([(*):(*)])unnamed

[0]{}=={}

FU: {(1'd1)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd1)}_0

op1 [1,1]([(*):(*)])unnamed

[1]{}=={}

MUX_ctrl port: __MUX_0___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_0__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

MUX_ctrl port: __MUX_1___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_1__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_0__1 | {OpC:1,OpC:2}

[(*):(*)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_1__0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[0]{}=={}

CS_offset_ctrl_i0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

offset_ctrl_i [0,1]([(*):(*)])unnamed

[0]{}=={}

offset_ctrl_i [0,0]([(*):(*)])unnamed

[0]{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

([(*):(*)])Clause Use

[0]{}=={}

{%OP_0 | %OP_1}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

General GraphLibraryGraph I/O withGraphwizGraph Algorithms

Background Templates STL Boost C++0x More Reading Q&A

Page 52: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost Graph Library

GI port: dat_i C[0(0):0(0)]C[0(0):0(0)]

__MUX_1__[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[1]{}=={}

GI port: op_i C[1(1):0(0)]C[1(1):0(0)]

port_i: instr_i(1) [(#)-1(*):0(0)]

[(#)-1(*):0(0)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

GO port: dat_o C[0(0):0(0)]C[0(0):0(0)]

FU: offset(offset)

port_o: dat_o C[0(0):0(0)]C[0(0):0(0)]

OFS: 1

offset

port_i: ctrl_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

port_i: dat_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

op0 [3,3]op1 [2,2]([(*):(*)])unnamed

[0]{}=={}

DECODERdec_unit(dec_unit)

port_o: __MUX_0__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: __MUX_1__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: offset_ctrl_i C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: oc_i C[1(1):0(0)]C[1(1):0(0)]

dec_unit

port_i: flush_it_i(1) C[0(0):0(0)]

C[0(0):0(0)]

dec_unit

dec_unit

FU: {(1'd0)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd0)}_0

__MUX_0__[(*):(*)]

op0 [1,1]([(*):(*)])unnamed

[0]{}=={}

FU: {(1'd1)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd1)}_0

op1 [1,1]([(*):(*)])unnamed

[1]{}=={}

MUX_ctrl port: __MUX_0___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_0__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

MUX_ctrl port: __MUX_1___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_1__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_0__1 | {OpC:1,OpC:2}

[(*):(*)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_1__0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[0]{}=={}

CS_offset_ctrl_i0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

offset_ctrl_i [0,1]([(*):(*)])unnamed

[0]{}=={}

offset_ctrl_i [0,0]([(*):(*)])unnamed

[0]{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

([(*):(*)])Clause Use

[0]{}=={}

{%OP_0 | %OP_1}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

General GraphLibraryGraph I/O withGraphwizGraph Algorithms

Background Templates STL Boost C++0x More Reading Q&A

Page 53: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Boost Graph Library

GI port: dat_i C[0(0):0(0)]C[0(0):0(0)]

__MUX_1__[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[1]{}=={}

GI port: op_i C[1(1):0(0)]C[1(1):0(0)]

port_i: instr_i(1) [(#)-1(*):0(0)]

[(#)-1(*):0(0)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

GO port: dat_o C[0(0):0(0)]C[0(0):0(0)]

FU: offset(offset)

port_o: dat_o C[0(0):0(0)]C[0(0):0(0)]

OFS: 1

offset

port_i: ctrl_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

port_i: dat_i C[0(0):0(0)]C[0(0):0(0)]

OFS: -1

offset

op0 [3,3]op1 [2,2]([(*):(*)])unnamed

[0]{}=={}

DECODERdec_unit(dec_unit)

port_o: __MUX_0__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: __MUX_1__ C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: offset_ctrl_i C[0(0):0(0)]C[0(0):0(0)]

dec_unit

port_o: oc_i C[1(1):0(0)]C[1(1):0(0)]

dec_unit

port_i: flush_it_i(1) C[0(0):0(0)]

C[0(0):0(0)]

dec_unit

dec_unit

FU: {(1'd0)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd0)}_0

__MUX_0__[(*):(*)]

op0 [1,1]([(*):(*)])unnamed

[0]{}=={}

FU: {(1'd1)}_0

port_o: res_o C[0(0):0(0)]C[0(0):0(0)]

{(1'd1)}_0

op1 [1,1]([(*):(*)])unnamed

[1]{}=={}

MUX_ctrl port: __MUX_0___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_0__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

MUX_ctrl port: __MUX_1___ci [0(0):0(0)][0(0):0(0)]

([0(0):0(0)])__MUX_1__

[0]{}=={}

* [0,0]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_0__1 | {OpC:1,OpC:2}

[(*):(*)]

op0 [0,1]op1 [0,1]([(*):(*)])unnamed

[0]{}=={}

CS___MUX_1__0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

op0 [0,1]([(*):(*)])unnamed

[0]{}=={}

op1 [0,0]([(*):(*)])unnamed

[0]{}=={}

CS_offset_ctrl_i0 | {OpC:2}1 | {OpC:1}

[(*):(*)]

offset_ctrl_i [0,1]([(*):(*)])unnamed

[0]{}=={}

offset_ctrl_i [0,0]([(*):(*)])unnamed

[0]{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,1]([(*):(*)])

class_control[0]

{}=={}

* [0,0]([(*):(*)])

class_control[0]

{}=={}

([(*):(*)])Clause Use

[0]{}=={}

{%OP_0 | %OP_1}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

([(*):(*)])HW Muxing Ctrl

[0]{}=={}

{}

General GraphLibraryGraph I/O withGraphwizGraph Algorithms

Background Templates STL Boost C++0x More Reading Q&A

Page 54: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Regex

ExampleCredit card number parsing...

Background Templates STL Boost C++0x More Reading Q&A

Page 55: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Regex

ExampleCredit card number parsing...

Background Templates STL Boost C++0x More Reading Q&A

Page 56: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Spirit

ExampleRoman number parser...

Background Templates STL Boost C++0x More Reading Q&A

Page 57: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Spirit

ExampleRoman number parser...

Background Templates STL Boost C++0x More Reading Q&A

Page 58: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Bimap

Background Templates STL Boost C++0x More Reading Q&A

Page 59: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

ASIO

[2]

Background Templates STL Boost C++0x More Reading Q&A

Page 60: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Format

Printf like format specification for std::cout

ExampleSome formatted output...

Background Templates STL Boost C++0x More Reading Q&A

Page 61: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Format

Printf like format specification for std::cout

ExampleSome formatted output...

Background Templates STL Boost C++0x More Reading Q&A

Page 62: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Interprocess

Cross platform interprocess communication.Shared memoryMemory-mapped filesSemaphores, mutexes,Named synchronization objectsFile lockingRelative pointersMessage queues

Background Templates STL Boost C++0x More Reading Q&A

Page 63: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Lambda

λ-functions in C++

int foo(int)...list<int> v(10);for_each(v.begin(), v.end(), _1 = 17);vector<int*> vp(10);transform(v.begin(),v.end(),vp.begin(),&_1);for_each(v.begin(),v.end(), _1 = bind(foo,_1));sort(vp.begin(),vp.end(),*_1 < *_2);for_each(vp.begin(),vp.end(), cout << *_1 << ’\n’);

Background Templates STL Boost C++0x More Reading Q&A

Page 64: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Optional

Problem

int read_int(std::istream&);

Traditional Solutions

bool read_int(std::istream&, int&);int read_int(std::istream&) throw(some error);

Solution with boost::optional

boost::optional<int> read_int(std::istream&);

Background Templates STL Boost C++0x More Reading Q&A

Page 65: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Optional

Problem

int read_int(std::istream&);

Traditional Solutions

bool read_int(std::istream&, int&);int read_int(std::istream&) throw(some error);

Solution with boost::optional

boost::optional<int> read_int(std::istream&);

Background Templates STL Boost C++0x More Reading Q&A

Page 66: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Optional

Problem

int read_int(std::istream&);

Traditional Solutions

bool read_int(std::istream&, int&);int read_int(std::istream&) throw(some error);

Solution with boost::optional

boost::optional<int> read_int(std::istream&);

Background Templates STL Boost C++0x More Reading Q&A

Page 67: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Program Options

ExampleProgram options...

Background Templates STL Boost C++0x More Reading Q&A

Page 68: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Program Options

ExampleProgram options...

Background Templates STL Boost C++0x More Reading Q&A

Page 69: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Serialization

PortableVersioningProper pointer store/restoreSerialization of STL containers

ExampleSerialization example...

Background Templates STL Boost C++0x More Reading Q&A

Page 70: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Serialization

PortableVersioningProper pointer store/restoreSerialization of STL containers

ExampleSerialization example...

Background Templates STL Boost C++0x More Reading Q&A

Page 71: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Smart Pointres

Traditional Solution

int* int_pointer = new int(17);....// Somewhere else in the codedelete int_pointer

ProblemsForget deleteMiss delete due to exceptionMemory management code

Solution with boost::shared_ptr

boost::shared_ptr<int> int_pointer(new int(17));

Background Templates STL Boost C++0x More Reading Q&A

Page 72: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Smart Pointres

Traditional Solution

int* int_pointer = new int(17);....// Somewhere else in the codedelete int_pointer

ProblemsForget deleteMiss delete due to exceptionMemory management code

Solution with boost::shared_ptr

boost::shared_ptr<int> int_pointer(new int(17));

Background Templates STL Boost C++0x More Reading Q&A

Page 73: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Smart Pointres

Traditional Solution

int* int_pointer = new int(17);....// Somewhere else in the codedelete int_pointer

ProblemsForget deleteMiss delete due to exceptionMemory management code

Solution with boost::shared_ptr

boost::shared_ptr<int> int_pointer(new int(17));

Background Templates STL Boost C++0x More Reading Q&A

Page 74: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Smart Pointres

Traditional Solution

int* int_pointer = new int(17);....// Somewhere else in the codedelete int_pointer

ProblemsForget deleteMiss delete due to exceptionMemory management code

Solution with boost::shared_ptr

boost::shared_ptr<int> int_pointer(new int(17));

Background Templates STL Boost C++0x More Reading Q&A

Page 75: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Smart Pointres

Traditional Solution

int* int_pointer = new int(17);....// Somewhere else in the codedelete int_pointer

ProblemsForget deleteMiss delete due to exceptionMemory management code

Solution with boost::shared_ptr

boost::shared_ptr<int> int_pointer(new int(17));

Background Templates STL Boost C++0x More Reading Q&A

Page 76: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Smart Pointers

scoped_ptrscoped_arrayshared_arrayweak_ptrintrusive_ptr

Background Templates STL Boost C++0x More Reading Q&A

Page 77: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Smart Pointers

scoped_ptrscoped_arrayshared_arrayweak_ptrintrusive_ptr

Background Templates STL Boost C++0x More Reading Q&A

Page 78: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Smart Pointers

scoped_ptrscoped_arrayshared_arrayweak_ptrintrusive_ptr

Background Templates STL Boost C++0x More Reading Q&A

Page 79: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Smart Pointers

scoped_ptrscoped_arrayshared_arrayweak_ptrintrusive_ptr

Background Templates STL Boost C++0x More Reading Q&A

Page 80: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Smart Pointers

scoped_ptrscoped_arrayshared_arrayweak_ptrintrusive_ptr

Background Templates STL Boost C++0x More Reading Q&A

Page 81: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

And Much Much More...

AccumulatorsCRCDate and timeLexical castMathSignalsState chartUnitsTemplate meta programmingRandomGeneric Image LibraryIn_place_factoryMessage Passing InterfaceEven more at www.boost.org

Background Templates STL Boost C++0x More Reading Q&A

Page 82: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

C++0x - The Next C++ Standard

Expected to be done by 2011Almost 100% backward compatibleSupport is growing

Background Templates STL Boost C++0x More Reading Q&A

Page 83: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

C++0x - The Next C++ Standard

Expected to be done by 2011Almost 100% backward compatibleSupport is growing

Background Templates STL Boost C++0x More Reading Q&A

Page 84: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

C++0x - The Next C++ Standard

Expected to be done by 2011Almost 100% backward compatibleSupport is growing

Background Templates STL Boost C++0x More Reading Q&A

Page 85: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Rvalue Reference

Move semanticsPerfect Forwarding

ExampleVector move...

Background Templates STL Boost C++0x More Reading Q&A

Page 86: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Rvalue Reference

Move semanticsPerfect Forwarding

ExampleVector move...

Background Templates STL Boost C++0x More Reading Q&A

Page 87: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Rvalue Reference

Move semanticsPerfect Forwarding

ExampleVector move...

Background Templates STL Boost C++0x More Reading Q&A

Page 88: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Generalized Constants

Illegal in ANSI C++

int GetFive() {return 5};...int arr[GetFive()+7];

Legal in C++0x

constexpr int GetFive() {return 5};...int arr[GetFive()+7];

Background Templates STL Boost C++0x More Reading Q&A

Page 89: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Generalized Constants

Illegal in ANSI C++

int GetFive() {return 5};...int arr[GetFive()+7];

Legal in C++0x

constexpr int GetFive() {return 5};...int arr[GetFive()+7];

Background Templates STL Boost C++0x More Reading Q&A

Page 90: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Initializer Lists

class SequenceClass{public:SequenceClass(std::initializer_list<int> list);

};...SequenceClass someVar = {1, 4, 5, 6};

void FunctionName(std::initializer_list<float> list);FunctionName({1.0f, -3.45f, -0.4f});

std::vector<std::string> v = { "xy", "plu", "abra" };std::vector<std::string> v{ "xy", "plu", "abra" };

Background Templates STL Boost C++0x More Reading Q&A

Page 91: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Uniform Initialization

struct BasicStruct{int x;double y;

};struct AltStruct{

AltStruct(int x, double y) : x_{x}, y_{y} {}private:

int x_;double y_;

};BasicStruct var1{5, 3.2};AltStruct var2{2, 4.3};

Background Templates STL Boost C++0x More Reading Q&A

Page 92: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Automatic Types

auto someType = boost::bind(&someFunction, _2,_1, someObject);

auto otherVariable = 5;

int someInt;decltype(someInt) otherIntegerVariable = 5;

Background Templates STL Boost C++0x More Reading Q&A

Page 93: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Range Based For Loops

Works forarraysinitializer listsContainers with begin() ... end()

int my_array[5] = {1, 2, 3, 4, 5};for(int& x : my_array){x *= 2;

}

Background Templates STL Boost C++0x More Reading Q&A

Page 94: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Lambda

λ-functions in C++

int foo(int)...list<int> v(10);for_each(v.begin(), v.end(), _1 = 17);vector<int*> vp(10);transform(v.begin(),v.end(),vp.begin(),&_1);for_each(v.begin(),v.end(), _1 = bind(foo,_1));sort(vp.begin(),vp.end(),*_1 < *_2);for_each(vp.begin(),vp.end(), cout << *_1 << ’\n’);

Background Templates STL Boost C++0x More Reading Q&A

Page 95: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Lambda Functions

[](int x, int y) { return x + y; }[](int x, int y) -> int { int z = x + y; return z + x; }std::vector<int> someList;int total = 0;std::for_each(someList.begin(),

someList.end(), [&total](int x) {total += x;

});std::cout << total;

Background Templates STL Boost C++0x More Reading Q&A

Page 96: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Alternative Function Syntax

Problem

template< typename LHS, typename RHS>Ret AddingFunc(const LHS &lhs, const RHS &rhs){return lhs + rhs;}

Solution

template< typename LHS, typename RHS>auto AddingFunc(const LHS &lhs, const RHS &rhs)-> decltype(lhs+rhs){return lhs + rhs;}

Background Templates STL Boost C++0x More Reading Q&A

Page 97: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Alternative Function Syntax

Problem

template< typename LHS, typename RHS>Ret AddingFunc(const LHS &lhs, const RHS &rhs){return lhs + rhs;}

Solution

template< typename LHS, typename RHS>auto AddingFunc(const LHS &lhs, const RHS &rhs)-> decltype(lhs+rhs){return lhs + rhs;}

Background Templates STL Boost C++0x More Reading Q&A

Page 98: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Varadic Templates

template<typename T, typename... Args>void printf(const char* s, T value, Args... args){

while (*s){

if (*s == ’%’ && *(++s) != ’%’){

std::cout << value;printf(s, args...);return;

}std::cout << *s++;

}throw std::logic_error

("extra arguments provided to printf");}

Background Templates STL Boost C++0x More Reading Q&A

Page 99: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

User Defined Literals

OutputType operator "" _Suffix(unsigned long long);OutputType operator "" _Suffix(long double);

OutputType someVariable = 1234_Suffix;OutputType anotherVariable = 3.1416_Suffix;

Background Templates STL Boost C++0x More Reading Q&A

Page 100: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Default and Delete Member Functions

struct NonCopyableAndNewable{NonCopyable & operator=(const NonCopyable&) = delete;NonCopyable(const NonCopyable&) = delete;NonCopyable() = default;void *operator new(std::size_t) = delete;

void f(int i);template<class T> void f(T) = delete;

};

Background Templates STL Boost C++0x More Reading Q&A

Page 101: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Compile Time Assertion

ExampleStatic assert example...

Background Templates STL Boost C++0x More Reading Q&A

Page 102: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Compile Time Assertion

ExampleStatic assert example...

Background Templates STL Boost C++0x More Reading Q&A

Page 103: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Other Changes

Relaxed POD requirementsextern templatenullptr

Strongly typed enumerationsExplicit conversion operatorsUnrestricted unionsUnicode stringsMultithreading

Background Templates STL Boost C++0x More Reading Q&A

Page 104: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

More Reading

Bjarne StroustrupThe C++ Programming Language

Nicolai M. JosuttisThe C++ Standard Library: A Tutorial and Reference

David Vandevoorde, Nicolai M. JosuttisC++ Templates: The Complete Guide

Boosthttp://www.boost.org

STLhttp://www.sgi.com/tech/stl/

C++0xhttp://en.wikipedia.org/wiki/C%2B%2B0x

Background Templates STL Boost C++0x More Reading Q&A

Page 105: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Questions

Background Templates STL Boost C++0x More Reading Q&A

Page 106: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Questions

Background Templates STL Boost C++0x More Reading Q&A

Page 107: An Oddysey in C++ · An Oddysey in C++ A Guided Tour of Modern C++ Per Karlström per@karlstrom.se Upplysningen 2010-03-02 BackgroundTemplatesSTLBoostC++0xMore ReadingQ&A

Attribution

[1] [1]Christian Coohttp://commons.wikimedia.org/wiki/File:Puertobarcelona2.jpg

[2] [2]Achim Heringhttp://commons.wikimedia.org/wiki/File:Cable_sald.jpg

Appendix