如何在运行时创建N个整数的元组

时间:2014-01-02 05:35:55

标签: c++ tbb tbb-flow-graph

我需要一种通用的方法来在运行时创建N个整数的元组,其中N是向量的大小(不超过20)。例如:

int main() {
    vector<int> vec;
    vec.push_back(31);
    vec.push_back(24);

    auto x = MakeTuple(vec.size());    // x should have the type tuple<int,int>

    return 0;
}

编辑: 只是为了澄清...我不能坚持向量,因为我需要元组类型来使用lambda表达式创建TBB流图模板类的对象。

编辑2:显然,我需要解释这个问题。我有非结构化的网格,我动态分区到X分区。这些分区中的每一个与N个其他分区连接,其中N> 1。这些连接定义了我需要用来构建流程图的分区之间的依赖关系。由于网格的结构仅在运行时是已知的,因此依赖结构也是如此。因此,我需要一种方法来创建特定的图节点(TBB类),它将表示输入依赖关系的元组作为模板参数。

以下是如何创建具有两个输入依赖关系的TBB函数节点的示例:

using namespace tbb:flow;

function_node<tuple<int,int> > *f = 
    new function_node<tuple<int,int>>(g, 1, [=] (tuple<int,int> input) -> void { ... });

join_node<tuple<int,int> *j = new join_node<tuple<int,int>> (g);

make_edge(*j, *f);

现在,假设我们将网格划分为10个分区。我们通过检查边缘列表来确定每个分区的依赖关系。如果存在连接两个分区的边缘,例如 part1 part2 ,则这些分区之间存在依赖关系。我使用每分区向量收集依赖性信息。现在问题出现了:我需要使用这个依赖信息(存储在向量中)来创建一个函数节点的图形,它需要基于分区依赖性数量的正确元组类型。例如,如果 part1 part2 具有以下依赖关系[2,4,5,9]和[1,3],那么我需要这两个函数节点:

function_node<tuple<int,int> > *f1 = 
    new function_node<tuple<int,int>>(g, 1, [=] (tuple<int,int> input) -> void { ... });

function_node<tuple<int,int,int,int> > *f2 = 
    new function_node<tuple<int,int,int,int>>(g, 1, [=] (tuple<int,int,int,int> input) -> void { ... });

2 个答案:

答案 0 :(得分:1)

元组“维度”是其类型的一部分(通过模板),您无法在运行时从动态选择的值中选择类型。

坚持你的矢量。

答案 1 :(得分:0)

由于 必须 是元组,并且您对长度有限制,因此您可以使用工厂方法,例如以下psudo代码

generic_type MakeTuple(size_t n) {
    switch(n) {
        case 1:
            return make_tuple(int);
        case 2:
            return make_tuple(int, int);
        ...
        default:
            throw 'oh crap';
}