可变参数模板循环,非递归

塔120

我有一些功能,可以执行复杂的绘图。[使用伪代码]

template<typename fields...>       // field names of Brush class
void someFunction(){    
  for(very large loop){

     Brush brush = getBrush();
     int x;

     foreach(field : fields){     // <--- this somehow should be replaced
        x = brush.*field;
        brush.update(x);
     }

  }    
}

[清单1]

我称它为:

someFunction<&Brush::xPos1, &Brush::xPos2, &Brush::xPos3, &Brush::xPos4>()

我希望编译器生成如下内容:

void someFunction(){    
  for(very large loop){

     Brush brush = getBrush();
     int x;

        x = brush.xPos1;
        brush.update(x);

        x = brush.xPos2;
        brush.update(x);

        x = brush.xPos3;
        brush.update(x);

        x = brush.xPos4;
        brush.update(x);

  }    
}

[清单2]

我的意思是,我想摆脱该foreach(field:fields)。


我发现了这种可变的模板循环实现,但是它是递归的。对于性能共鸣,这甚至比foreach循环更糟糕

int a;

template <class T>
void print(const T msg)
{
    a = msg;
}


// And this is the recursive case:
template <class A, class... B>
void print(A head, B... tail)
{
    a = head;
  print(head);
  print(tail...);
}

[清单3]


所以问题是……是否有可能达到[清单2]的结果?如果是,那怎么办?

ro

我认为这样做没有实际意义。编译器应将for循环和递归模板都优化为同一代码。无论如何,这样的事情应该起作用:

struct Brush {
    int xPos1, xPos2, xPos3, xPos4;
    void update(int) {}
};

typedef int Brush::* Field;

template<Field...fs>
void Foo()
{
    Brush brush;
    int a[] = { (brush.update( brush.*fs ),0)... };
}

int main()
{
    Foo<&Brush::xPos1, &Brush::xPos2, &Brush::xPos3, &Brush::xPos4>();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

递归可变参数函数模板

来自分类Dev

c ++ 11递归可变参数模板

来自分类Dev

可变参数模板的递归继承

来自分类Dev

递归可变参数模板如何工作?

来自分类Dev

c ++ 11递归可变参数模板

来自分类Dev

检索递归可变参数模板的特殊类型参数

来自分类Dev

可变参数模板对

来自分类Dev

递归可变参数函数模板的返回类型的decltype

来自分类Dev

如何编写可变参数模板的递归函数?

来自分类Dev

可变参数模板递归构造函数问题

来自分类Dev

将递归可变参数模板函数转换为迭代

来自分类Dev

元组上的递归可变参数模板方法

来自分类Dev

N维向量的递归可变参数模板函数

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

可变参数模板类的可变参数模板

来自分类Dev

С++可变参数模板:实现可变参数

来自分类Dev

可变参数模板示例

来自分类Dev

可变参数模板提取

来自分类Dev

可变参数模板示例

来自分类Dev

可变参数模板的论点

来自分类Dev

模板元编程的可变参数模板

来自分类Dev

可变参数模板的部分模板特化

来自分类常见问题

如何存储可变参数模板参数?

来自分类Dev

用作可变参数模板的参数

来自分类Dev

可变参数模板参数和策略

来自分类Dev

可变参数模板参数的元迭代

来自分类Dev

C ++可变参数模板参数迭代

来自分类Dev

std :: function的可变参数模板参数

来自分类Dev

获取可变参数模板可变参数模板参数可变参数