Ион Тодирель уже упомянул ответ ДА, используя std::reference_wrapper
. Начиная с C ++ 11 у нас есть механизм для извлечения объекта из std::vector
и удаления ссылки с помощью std::remove_reference
. Ниже приведен пример, скомпилированный с использованием g++
и clang
с опцией -std=c++11
и выполнен успешно.
#include <iostream>
#include <vector>
#include<functional>
class MyClass {
public:
void func() {
std::cout << "I am func \n";
}
MyClass(int y) : x(y) {}
int getval()
{
return x;
}
private:
int x;
};
int main() {
std::vector<std::reference_wrapper<MyClass>> vec;
MyClass obj1(2);
MyClass obj2(3);
MyClass& obj_ref1 = std::ref(obj1);
MyClass& obj_ref2 = obj2;
vec.push_back(obj_ref1);
vec.push_back(obj_ref2);
for (auto obj3 : vec)
{
std::remove_reference<MyClass&>::type(obj3).func();
std::cout << std::remove_reference<MyClass&>::type(obj3).getval() << "\n";
}
}