【发布时间】:2014-01-02 05:35:55
【问题描述】:
我需要一种通用的方法来在运行时创建一个包含 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 { ... });
【问题讨论】:
-
无法在运行时选择类型。
-
I need a generic way to create a tuple of N integers in runtime不,你没有。别再看我们了! -
(variant)
I need a generic way to create a tuple of N integers in runtime可以,但这段代码不是“通用方式”。 -
C++14?
MakeTuple(vec.size(),[&](auto x){ // x istuple` }`) 怎么样? -
这样的元组有多少?
标签: c++ tbb tbb-flow-graph