0
我想使用編譯時遞歸來輸出一個網格的元素。這主要是爲了試圖熟悉這種技術的作用。使用編譯時遞歸來輸出一個網格
作爲一個例子,我試圖輸出一個網格(矢量>)的值。以下是我迄今爲止:
#include <iostream>
#include <vector>
#include <boost/utility/enable_if.hpp>
typedef std::vector<std::vector<int> > GridType;
template <std::size_t GridDimensions>
struct TestClass
{
template <std::size_t Dim>
typename boost::enable_if_c< (GridDimensions == Dim),
void >::type loop(GridType& grid) { };
template <std::size_t Dim>
typename boost::disable_if_c< (GridDimensions == Dim),
void >::type loop(GridType& grid)
{
for(std::size_t i = 0; i < grid.size(); ++i)
{
// loop in the nested dimension:
loop< Dim + 1 >(grid);
};
}; // end loop()
}; // end TestClass
int main(int argc, char *argv[])
{
std::vector<std::vector<int> > values;
for(unsigned int i = 0; i < 10; ++i)
{
std::vector<int> vec;
for(unsigned int j = 0; j < 5; ++j)
{
vec.push_back(j);
}
values.push_back(vec);
}
TestClass<2> test;
test.loop<0>(values);
return 0;
}
但是,我不知道放在哪裏輸出語句,或者是什麼的內循環迴路()應遍歷(我認爲的大小內部數組?)。
這個想法應該是,你只需要在單個行上實現一個輸出循環,並且該行的代碼將爲網格中的每一行生成,對嗎?
你確定你知道你在做什麼嗎?你不想應用編譯時遞歸來顯示一個在運行時填充的網格?這不像C++元編程的作品。看看SO上的其他問題,例如http://stackoverflow.com/q/5274149/106688 – Andrey 2012-01-30 01:36:12