Ion Todirel已经提到了一个答案是的使用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";
}
}