1
Q
在编译时生成坐标
A
回答
1
根据您的评论,您只是试图执行循环展开。你可能想要测量两种方式,但通常情况下,编译器在你知道数组边界时优化这些东西的工作要比你做得更好。通过强制循环展开,实际上可能会显着减慢或膨胀程序。
话虽这么说,如果这是你想做的事,这里是你如何能做到这一点:
#include <boost/hana.hpp>
namespace hana = boost::hana;
template <int ...> struct your_template { };
int main() {
auto xs = hana::to_tuple(hana::range_c<int, 0, 10>); // [0, ..., 9]
auto ys = hana::to_tuple(hana::range_c<int, 0, 10>); // [0, ..., 9]
auto zs = hana::to_tuple(hana::range_c<int, 0, 10>); // [0, ..., 9]
auto coords = hana::cartesian_product(hana::make_tuple(xs, ys, zs));
hana::for_each(coords, hana::fuse([](auto x, auto y, auto z) {
your_template<decltype(x)::value, decltype(y)::value, decltype(z)::value> foo;
(void)foo;
}));
}
注意,但是,产生笛卡尔乘积是在编译时非常讨厌的,因为你正在产生一个巨大的元组。例如,上面的内容大约需要10秒才能在我的盒子上编译。
相关问题
- 1. 在Polygon中生成坐标
- 2. C++坐标生成
- 3. 编译时间生成表
- 4. 数组编译时生成?
- 5. 编译时代码生成
- 6. 在编译时生成函数
- 7. 在编译时动态生成结构
- 8. 在编译时生成信息文件
- 9. 从java beans生成html - 在编译时
- 10. 在D中编译时间码生成
- 11. 编译时生成的在d
- 12. 在网格中生成坐标在一个圆内的坐标
- 13. 生成坐标立方体
- 14. 生成圆柱坐标
- 15. 生成坐标网格
- 16. 顶点坐标的生成
- 17. C++编译生成
- 18. 编译生成Cruft
- 19. ATL(atlalloc.h)编译时生成错误
- 20. 如何生成编译时错误?
- 21. 编译时如何生成代码?
- 22. 编译.exe程序时生成的.lib
- 23. 运行时代码生成和编译
- 24. netbeans在编译时没有生成类,但编译时运行程序
- 25. javax.tools编译器生成JAR
- 26. A.编译cpp2html.c生成cpp2html.o
- 27. Java编译不生成.jar
- 28. 生成编译器enum.ordinal
- 29. 生成KML中坐标的圆半径的坐标
- 30. OpenGL翻译 - 坐标
你是否需要自己的坐标在编译时可用(例如用它们实例化一个模板)?你想达到什么目的?如果你只是想优化一个循环,不要。在正常循环中使用'std :: array',优化器将完成它的工作。否则,使用'hana :: cartesian_product'。 –
我需要编译时的坐标来实例化一个模板。但是模板只是需要的,因为我正在做你猜到的 - 手动展开嵌套循环。起初我使用'std :: array'实现了我的算法。但是我不确定我应该相信编译器。这就是为什么我试图使用元编程实现另一个版本,并检查是否有任何显着的性能优势。 –