【发布时间】:2018-12-27 12:15:31
【问题描述】:
我想要一个可以摄取对象的容器,并将它的不同部分存储到不同的内部容器中。
类似这样的:
// Pseudo-code
template<typename A, typename B, typename C>
class Container {
std::vector<B> vb;
std::vector<C> vc;
public:
void push_back(const A &a) {
vb.push_back(a);
vc.push_back(a);
}
};
class AA {
int a;
std::string s;
};
class BB {
int a;
};
class CC {
std::string s;
};
Container<AA, BB, CC> cont;
AA aa;
cont.push_back(aa);
我希望对象 vb 获得 A 类和 B 类(切片)之间的共同点,对象 vc 也是如此。
理想情况下,AA、BB 和 CC 类不应处于层级关系中。我希望编译器能够按成员的类型匹配成员。
我更喜欢性能损失较小的解决方案。
【问题讨论】:
-
对象切片是类层次结构的一个特性。如果没有反射,尝试在没有继承的情况下实现类似的东西会非常棘手。
-
“编译器能够按成员的类型匹配成员”,这几乎是要求编译器读懂你的想法?您必须以一种或另一种方式指定您想要的东西。
-
@PasserBy:这取决于。如果没有同类型的成员变量,就不用读我的心思了。如果有,如果编译器可以匹配具有相同类型和相同名称的成员,那就太好了。
标签: c++ templates derived-class object-slicing