我创建了一个具有两个子类的抽象基类:
class Base {
public:
int a, b, c;
virtual void unreal() = 0;
};
class Sub1: public Base {
public:
virtual void unreal() {}
};
class Sub2: public Base {
public:
virtual void unreal() {}
};
我想创建一个可以传递两种类型参数的函数:
vector<Sub1> v1 and vector<Sub2> v2
插入其中,使用类似于:
Function(vector<Base&> v) {}
但没有成功。所以我想知道有办法吗?
2条答案
按热度按时间6ie5vjzr1#
使用C++20,您可以通过以下方式实现:
上面使用模板来适应任何类型的向量(通过允许函数接受
const std::vector<T>&
,其中T
是一个模板参数),但是为了限制T只能从Base派生,我们在模板中添加了对T的限制,要求它是std::derived_from<Base>
。编码:http://coliru.stacked-crooked.com/a/8aaa0c941fdc493e
在C++20之前,它需要一些更麻烦的SFINAE:
代码:http://coliru.stacked-crooked.com/a/0b7d98a84b6139b7
bnlyeluc2#
是的,您可以使用对
vector<Base>
的引用将vector<Sub1>
和vector<Sub2>
都传递到函数中:这应该可以实现,因为Sub1和Sub2是从Base派生的类,对派生类的引用可以传递给对基类的引用。但是,该函数将无法修改向量中的对象,因为对象是通过引用传递给常量向量的。