• Source
    1. #include <iostream>
    2. #include <functional>
    3.  
    4. void foo(int& arg) { arg = 10; }
    5.  
    6. template<typename T>
    7. void send_foo(T a)
    8. {
    9. foo(a);
    10. }
    11.  
    12. int main()
    13. {
    14. int n = 0;
    15.  
    16. //1. 직접 참조 사용 시 문제 없음
    17. foo(n);
    18. std::cout << "foo() : " << n << std::endl;
    19.  
    20. n = 0;
    21. //2-1. 전달 함수를 통해 사용 시
    22. send_foo(n); // 받으면서 복사본 생성
    23. std::cout << "send_foo() : " << n << std::endl;
    24.  
    25. //2-2. 포인터는 복사본은 아니지만 foo 대입 시 참조 변환 안됨 int* -> int (X) 컴파일 에러
    26. // send_foo(&n);
    27.  
    28. //3-1. reference_wrapper : // n 을 참조로 전달하겠다는 의도.
    29. std::reference_wrapper<int> r(n);
    30. send_foo(r);
    31. std::cout << "send_foo() : " << n << std::endl;
    32.  
    33. n = 0;
    34. //3-2. std::ref(n) : reference_wrapper 를 만들어주는 함수
    35. send_foo( std::ref(n) );
    36. std::cout << "send_foo() : " << n << std::endl;
    37. return 0;
    38. }