이 클래스 템플릿을 사용한다고 가정 해 봅시다. 그리드를 변경할 수 없으며, 더 어려운 개체를 나타냅니다. 변경하고 싶지 않습니다.하나의 클래스 멤버 배열에 임의의 수의 다른 클래스를 저장하는 C++
이제 my_grids 배열을 소유 한 새 클래스 템플릿 (multi_grid)을 사용하겠습니다. 나는 my_grids에 다른 그리드와 같은 (의사 코드)를 저장하려면 :
my_grids[0]=grid<x*1,y*1>,
my_grids[1]=grid<x*2,y*2>
my_grids[n]=grid<(x<<n),(y<<n)>
내 생각은 my_grids에 대한 * 무효 사용하고 생성자를 통해 그것을 설정하는 것입니다. 내 문제는 생성자에서 시작합니다
- 이 가능한 아이디어의 개념 :
template<int x, int y, int degree> class multi_grid{ public: void* my_grids[degree]; ~multi_grid(){}; multi_grid(){ create_grid<degree-1>(); } template<int grid_number> void create_grid(void){ my_grid[grid_number]=new grid<(x<<grid_number), (y<<grid_number)>; create_grid<grid_number-1>(); } }; template<int x, int y, int degree> template<int grid_number> void multi_grid<x, y, degree>::create_grid<-1>(){}
나는이 개 질문이?
- 첫 번째 대답이 사실이라면 어떻게해야합니까? 간단한 for_loop로 시작 했으므로 문제가됩니다. ++는 고정되어 있지 않기 때문입니다. 그래서 템플릿 재귀를 시도해 보았습니다. "shadows template parm"또는 "function template partial specialization 'create_grid < -1>'허용되지 않습니다 '와 같은 문제가 발생했습니다.
나는 그것을 풀기 위해 전체를 시도했지만 알아낼 수 없었다. 미리 감사드립니다.
_ "내 생각은 void *"_ 아주 나쁜 생각입니다. – user0042
@ user0042 알아, 더 좋은 생각이야? – Markus
'Boost.TypeErasure'와'dyno'와 같은 라이브러리가 있습니다.이 라이브러리는 전통적인 기본 클래스와 잘 어울립니다. – chris