元组迭代

时间:2014-07-18 14:06:18

标签: c++ templates iterator tuples variadic-templates

我知道有关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),我宁愿不使用动态分配,因为它在嵌入式系统上。

0 个答案:

没有答案