【发布时间】:2017-01-04 06:56:31
【问题描述】:
我想传递一个填充了基于对象的同一类的向量。
std::reference_wrapper 和 no-reference 都不能修复它。
解决这个问题的正确方法是什么?
class MyClass
{
public:
MyClass(int){};
virtual void print() const {
std::cout<<"MyClass"<<std::endl;
}
};
class MySubClass : public MyClass
{
public:
MySubClass(int a):MyClass(a){};
virtual void print() const {
std::cout<<"MySubClass"<<std::endl;
}
};
void test(const std::vector<std::reference_wrapper<MyClass>>& v)
{
for (const auto& c : v) {
c.get().print();
}
}
void test(const std::vector<MyClass>& v)
{
for (const auto& c : v) {
c.print();
}
}
int main()
{
{
MySubClass s(2);
std::vector<MyClass> v;
v.push_back(s);
test(v);//print MyClass, but I need MySubClass
}
{
MySubClass s(2);
std::vector<std::reference_wrapper<MyClass>> v;
v.push_back(s);
test(v);//print MySubClass
test({2});
test({s});//wrong ambigious
}
return 0;
}
【问题讨论】:
-
const std::vector<MyClass>& v- 这里没有MyClass的副本,因为您传递的是对向量的引用。 -
您将苹果与摩托车进行比较——您想要引用向量还是对象向量?它们有完全不同的用途。你想做什么?
-
@Holt 抱歉,我说得不够清楚。现在我重新编辑了。
-
@ChrisDodd 抱歉,我说得不够清楚。现在我重新编辑了。
标签: c++ c++11 vector stl reference-wrapper