동일한 클래스를 기반으로 객체로 채워진 벡터를 전달하고 싶습니다. std::reference_wrapper
과 참조 없음을 모두 수정하지 않았습니다. 이 문제를 해결하는 올바른 방법은 무엇입니까?std :: vector를 매개 변수로 전달하는 올바른 방법은 무엇입니까?
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 & v' - 벡터에 대한 참조를 전달하기 때문에 여기에 'MyClass'의 복사본이 없습니다. –
Holt
사과를 오토바이와 비교하고 있습니다 - 참조 벡터 나 물체 벡터를 원하십니까? 그들은 완전히 다른 용도를 가지고 있습니다. 너 뭐하려고? –
@Holt 죄송합니다, 충분히 명확하게하지 않았습니다. 이제 나는 다시 편집했다. –