Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多态对象容器_C++_Polymorphism - Fatal编程技术网

C++ 多态对象容器

C++ 多态对象容器,c++,polymorphism,C++,Polymorphism,因为指针和引用都实现了中的is-a关系 C++中继承的上下文。 我们用来存储指向对象的指针容器 实现多态行为也可以用容器实现吗?即在容器中存储引用而不是指针 我的问题不同于,因为它是在多态性的上下文中,您可以使用特殊的类std::reference\u wrapper,例如: std::vector<std::reference_wrapper<MyClass>> ref_vector; std::vector ref\u vector; 以下是一个使用示例: std

因为指针和引用都实现了中的is-a关系 C++中继承的上下文。 我们用来存储指向对象的指针容器 实现多态行为也可以用容器实现吗?即在容器中存储引用而不是指针


我的问题不同于,因为它是在多态性的上下文中,您可以使用特殊的类
std::reference\u wrapper
,例如:

std::vector<std::reference_wrapper<MyClass>> ref_vector;
std::vector ref\u vector;
以下是一个使用示例:

std::vector<int> vec{1, 2};
std::vector<std::reference_wrapper<int>> refs(vec.begin(), vec.end());

vec[1] = 3;
std::copy(refs.begin(), refs.end(), std::ostream_iterator<int>(std::cout, " "));
std::向量向量{1,2};
向量引用(vec.begin(),vec.end());
vec[1]=3;
std::copy(refs.begin()、refs.end()、std::ostream_迭代器(std::cout,“”);

输出为“13”,这表明对原始元素的引用是保留的,而不是副本(否则输出将为“12”)。

我认为指针是引用。你能进一步说明你的要求吗?或者举个例子?我们不设置,而是设置,这样的事情是可能的吗?@Elyasin-指针不是引用相关的/dupe@Smeeheey也许你只是在这里讨论一个技术问题。但就用例中的用法而言,我认为它们是相同的。请看下面的答案。引用包装器只是包装了一个指针。这样看:
int*p
它是指针声明,
p
是引用,
*p
是解引用。没有必要炫耀严格定义的技术术语。我明白你想说什么,但那不是我想说的,别管它了。如果可能的话,你能提供一些使用的例子吗?@NathanOliver:引用CPP参考资料:“std::reference_wrapper是一个类模板,它将引用封装在可复制、可分配的对象中。它经常被用作在标准容器(如std::vector)中存储引用的机制,而标准容器通常无法保存引用。“@Smeeheey,如果您在“可能的实现”中再往下看一点“它有
T*\u ptr。仅仅包装一个引用是不可行的,因为引用是不可复制的,这会使
reference\u wrapper
不可复制。@NathanOliver-我没有反驳你。OP提出了一种将引用存储在容器中的方法,我向他展示了实现这一点的构造。是的,它是使用指针实现的。但是引用本身仍然是用指针实现的。@sameerkn-我知道这一切。叹息。。。为什么我会被拖进这件事?我非常清楚引用和指针之间的概念差异。我上面的实现提供了一个引用的概念容器,这正是
std::reference\u wrapper
的设计目的。实现可能使用指针,也可能不使用指针(就像引用的实现可能使用指针,也可能不使用指针)这一事实肯定不是重点!