C++11 - 컨테이너에 참조 보관하기

std::reference_wrapper를 사용하면 컨테이너에 오브젝트의 참조를 보관할 수 있다.
std::reference_wrapper<functional> 헤더를 사용한다.

#include <iostream>
#include <string>
#include <vector>
#include <functional>

struct Base {
    void print() const { std::cout << "print" << std::endl; }
};

struct Integer : Base {
    int get_int() const { return 3; }
};

struct String : Base {
    std::string get_string() const { return "Hello"; }
};

int main()
{
    Integer n;
    String s;

    std::vector<std::reference_wrapper<Base> > v;
    v.push_back(std::ref<Base>(n));
    v.push_back(std::ref<Base>(s));

    
    for(Base& base : v)
    {
        base.print();
    }
    
    const int v1 = n.get_int();
    const std::string v2 = s.get_string();
}

Wandbox


이 글은 2020-04-17에 작성되었습니다.