【发布时间】:2009-11-03 18:20:40
【问题描述】:
考虑这个简单的代码:
class A {
};
class V1: vector<A *>{
// my nice functions
};
如果我有一个 V1 的实例,那么任何从 A 派生的对象都可以插入到向量中,在这里可以。
现在,假设我有两个名为 B 和 C 的简单类都派生自 A;
如果我有一个 V1 的实例,那么 B 和 C 的指针都可以插入到这个向量中,我想这是正确的吗?
如果是这样,我如何从 V1 派生一个向量以确保只插入 B 指针?
我正在考虑使用模板,但在这种情况下,我已经知道类的基础,并且在模板中你可以使用任何东西,对吧?
不知道我是否清楚,我的英语没有帮助......
我是否必须重写 push_back 和其他函数来检查模板参数是否从 A 派生?
请不要谈论我正在使用的提升或语法等......我真的只是想了解这个的概念......我还不清楚。我对此有一些答案,但我想它们涉及太多演员来检查东西,我来这里是想知道是否有更好的答案......
谢谢!
乔纳森
ps:你们能回答我放的cmets吗?有时我在这里问一些东西,然后最好的回答者来了,然后就不回来了:(。或者我应该问另一个问题而不是评论提问?
【问题讨论】:
-
明确一点,你B派生自A,但你不想在V1中存储指向B对象的指针,只存储指向A对象的指针?
-
对不起...我有一个名为 A 的抽象类,然后我将有几个从 A 派生的类,例如 B 和 C。然后会有一个向量,每个(或大多数)派生自A. 像vector、vector
,但我想创建一个已经有很多函数的类,这些函数使用A类的成员和例程,并且不想为向量重写这些东西B和C的……我还不清楚吗?再次抱歉=[
标签: c++ inheritance templates vector specialization