
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Reference Wrapper in C++
std::reference_wrapper is a class template in C++ that allows you to store references to objects or functions in a way that makes them copyable and assignable. Normally, C++ references can't be stored in standard containers like std::vector or std::list, because references are not copyable. std::reference_wrapper<T> solves this problem by internally storing a pointer to the referenced object.
It acts like a wrapper around a reference and behaves almost like the original object. It can be passed to functions that take T& (a reference to T), because std::reference_wrapper<T> is implicitly convertible to T&.
This is especially useful when you want to store and work with references in STL containers or when passing around callable objects like functions or lambdas.
Example of reference_wrapper Class
In this C++ example, we demonstrate how std::reference_wrapper<int>
enables storing references to variables (a, b, and c) in a std::vector. By using reference_wrapper:
#include <iostream> #include <vector> #include <functional> int main() { int a = 10, b = 20, c = 30; std::vector < std::reference_wrapper < int >> refVec = {a, b, c}; for (auto & ref: refVec) { // Modify original values ref.get() += 1; } std::cout << a << " " << b << " " << c << std::endl; }
Following is the output of the above code ?
11 21 31
Creating Character Array Using reference_wrapper Class
Following is another C++ example, to demonstrate the use of std::reference_wrapper by creating an array of character "references" ?
#include <iostream> #include <functional> using namespace std; int main() { char a = 't', b = 'u', c = 't', d = 'o', e = 'r', f = 'i', g = 'a', h = 'l', i = 's'; reference_wrapper < char > ref[] = { a, b, c, d, e, f, g, h, i }; for (char & str: ref) cout << str; return 0; }
Following is the output ?
tutorials