私はオブジェクトベースの同じクラスでいっぱいのベクトルを渡したいと思います。 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申し訳ありませんが、私は十分に明確にしていませんでした。今私は再編集した。 –