下面的代碼工作:如何返回嵌套在其他包中的模板包?
#include <iostream>
#include <list>
struct Base {};
struct A : Base {}; struct B : Base {}; struct C : Base {};
struct D : Base {}; struct E : Base {}; struct F : Base {};
template <int KEY, typename... RANGE> struct Map {}; // one-to-many map (mapping KEY to RANGE...)
template <typename...> struct Data {};
using Database = Data< Map<0, A,B,C>, Map<1, D,E,F> >;
template <int N, typename FIRST, typename... REST> // N has meaning in my program, but not shown here.
void insertInMenu (std::list<Base*>& menu) {
menu.push_back(new FIRST);
insertInMenu<N, REST...> (menu);
}
template <int N>
void insertInMenu (std::list<Base*>&) {} // End of recursion.
template <int N>
std::list<Base*> menu() {
std::list<Base*> m;
insertInMenu<0, A,B,C>(m); // A,B,C should be obtained using N and Database.
return m;
}
int main() {
std::list<Base*> m = menu<0>();
std::cout << "m.size() = " << m.size() << std::endl; // 3
}
但正如上面我的評論所指出的,我想用Database
和值N
獲得該範圍A,B,C
(或D,E,F
)或什麼的。但我不知道該怎麼做?誰能幫忙? 線
insertInMenu<0, A,B,C>(m);
需要的東西來代替像
obtainRange<Database, N>()
,因爲這些編譯時已知值應該是足夠的信息來獲得我想要的範圍。
obtainRange<Database, 0>()
應該返回A,B,C
和
obtainRange<Database, 1>()
應該在這種情況下返回D,E,F
。
你在哪裏'Database'選擇'Map'基於其指數? – 2014-10-08 16:31:37
@PiotrS。錯字。固定。 – Columbo 2014-10-08 16:52:14
我的意思是'insertInMenu <1,數據