gpt4 book ai didi

c++ - for循环消除

转载 作者:太空狗 更新时间:2023-10-29 21:26:01 25 4
gpt4 key购买 nike

我想使用 indices trick消除for在我的 C++11 程序中循环(类似于强制 -funroll-loops )。

这是一个例子:

template<unsigned...> struct indices
{
};

template<unsigned M, unsigned... Is> struct indices_gen
: indices_gen<M - 1, M - 1, Is...>
{
};

template<unsigned... Is> struct indices_gen<0, Is...> : indices<Is...>
{
};

template <typename T>
struct example
{
example()
{
assign(indices_gen<3>(), 0);
}

template<unsigned... Is, typename U>
void assign(indices<Is...>, U value)
{
[](...){}((array[Is] = value)...);
}

T array[3];
};

int main()
{
example<int> ex;
return 0;
}

是否可以创建 indices_gen<S,E> , 从开始索引 S结束索引 E ?你能告诉我怎么做吗?

最佳答案

试试这个(http://liveworkspace.org/code/e65a81d0d3e9b17692713fd3e9d681f5):

template<unsigned...> struct indices {};

template<unsigned S, unsigned E, unsigned... Is> struct indices_gen
: indices_gen<S, E-1, E-1, Is...>
{};

template<unsigned S, unsigned... Is> struct indices_gen<S, S, Is...> : indices<Is...>
{};

工作示例:http://liveworkspace.org/code/3d0ba21cc637a61c3e63d2db002f87af

编辑 : 检查 Xeo 的评论。上面的例子不检查是否 S < E ,所以如果你犯了错误,它可能会变坏。在这种情况下(Xeo 的代码)将返回编译器错误:http://liveworkspace.org/code/81205e13334e89537bdc0b79b3ba56fc

关于c++ - for循环消除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12794114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com