我知道有关std:tuple迭代的SO还有其他问题,但我找不到一个似乎符合我要求的问题。
我有一个带有元组的模板类(它需要是一个容器类,用于保存通过可变参数模板参数传入的对象;所有这些都是从基类派生的。)
我希望有一系列成员变量指针,它们被设置为指向元组的第1,第2,第3等元素。有一定数量的此类成员变量,因此如果元组元素太少则指针应为null。如果有更多的元组元素而不是成员变量,那么只有这些成员变量没有指向的容差成员。
class BaseTupleElement {
public:
virtual int polymorphicFunction() {return 0;}; // can be overridden to avoid need for RTTI on embedded system
};
class DerivedElement1 : public BaseTupleElement {
public:
virtual int polymorphicFunction() {return 1;};
}
class DerivedElement2 : public BaseTupleElement {
public:
virtual int polymorphicFunction() {return 2;};
}
template<typename... systems> // systems will always be of derived class of BaseTupleElement
class System {
System();
const std::tuple<systems...> subSystems;
DerivedElement1 *pd1;
DerivedElement2 *pd2;
};
template<typename... systems> System::System() : subSystems(systems{}...) {
pd1 = NULL;
pd2 = NULL;
// I want to go through each item in the tuple and set pd1 & pd2 to point to the first element
// that returns 1 or 2 respectively, then I can use pd1 & pd2 as derived pointers and utilise
// full functionality of derived class
}
我在for循环中尝试了各种std :: get(BaseTupleElement),其中0&lt; = i&lt; std :: tuple_size但是我得到了编译错误,如:
错误:'i'的值在常量表达式中不可用
有没有一种简单的方法可以解决这个问题?
否则我的想法就是做:
System() : subSystems{std::make_unique<systems>()...} {}
std::vector<std::unique_ptr<BaseTupleElement>> subsystemVector;
如果我可以使用它(当然不是RTTI),我宁愿不使用动态分配,因为它在嵌入式系统上。