[c++ korea] effective modern c++ study item 22,28

24
Effective Modern C++ Study C++ Korea

Upload: seok-joon-yun

Post on 28-Jul-2015

209 views

Category:

Software


4 download

TRANSCRIPT

Page 1: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

Page 2: [C++ Korea] Effective Modern C++ Study item 22,28
Page 3: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea3

widget.h

string vector gadget.h

Page 4: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea4

widget.cpp

string vector gadget.h widget.h

Page 5: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea5

조금더나은모양

Page 6: [C++ Korea] Effective Modern C++ Study item 22,28
Page 7: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea7

Page 8: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea8

header에서는 정의만할수있도록할것.

???

Page 9: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea9

Page 10: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea10

Page 11: [C++ Korea] Effective Modern C++ Study item 22,28
Page 12: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

template<typename T>void func(T&& param);

T가 아닌 param의 type

Page 13: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

template<typename T>void func(T&& param);

Widget widgetFactory(); // function returning rvalueWidget w; // a variable (an lvalue)func(w); // call func with lvalue; T deduced

// to be Widget&func(widgetFactory()); // call func with rvalue; T deduced

// to be Widget

Page 14: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

int x;auto& & rx = x; // error! can't declare reference to reference

Page 15: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

void func(Widget& && param);

void func(Widget& param);

Page 16: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

template<typename T>void f(T&& fParam){

someFunc(std::forward<T>(fParam)); // forward fParam to} // someFunc

template<typename T> T&& forward(typename remove_reference<T>::type& param){

return static_cast<T&&>(param);}

Page 17: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

Widget& && forward(typenameremove_reference<Widget&>::type& param){

return static_cast<Widget& &&>(param);}

Widget& && forward(Widget& param){

return static_cast<Widget& &&>(param);}

Widget& forward(Widget& param) {

return static_cast<Widget&>(param);}

Page 18: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

Widget&& forward(typenameremove_reference<Widget>::type& param){

return static_cast<Widget&&>(param);}

Widget&& forward(Widget& param){

return static_cast<Widget&&>(param);}

Page 19: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

template<typename T> T&& forward(remove_reference_t<T>& param) {

return static_cast<T&&>(param);}

Page 20: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

template<typename T>void func(T&& param);Widget widgetFactory(); // function returning rvalueWidget w; // a variable (an lvalue)func(w); // call func with lvalue; T deduced

// to be Widget&func(widgetFactory()); // call func with rvalue; T deduced

// to be Widget

Page 21: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

auto&& w1 = w;

Widget& && w1 = w;

auto&& w2 = widgetFactory();

Widget&& w2 = widgetFactory();

Page 22: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

template<typename T>class Widget {public:typedef T&& RvalueRefToT;

};

Widget<int&> w;

typedef int& && RvalueRefToT;

typedef int& RvalueRefToT;

Page 23: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea

Page 24: [C++ Korea] Effective Modern C++ Study item 22,28

Effective Modern C++ StudyC++ Korea