निम्नलिखित कोड काम करता है:अन्य पैक में घोंसला वाला टेम्पलेट पैक कैसे वापस करें?
#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' चयन कर रहे हैं इसके सूचकांक के आधार पर? –
@PiotrS। टाइपो। फिक्स्ड। – Columbo
मैं मतलब है कि 'insertInMenu <1, डाटा