मैं टेम्पलेट के साथ अपनी कक्षा का उपयोग करना चाहता हूं। मुख्य रूप से:

int main(void)
{
   HexAdapter<vector> foo;
   // maybe?
   // HexAdapter<vector<Cell>> foo;

   return 0;

}

मैंने कुछ इस तरह की कोशिश की

template <typename T>
class HexAdapter
{
public:
    HexAdapter();

private:
    T<T<Cell>> hexCells;

};

इस कारण से, आम तौर पर मैं इस तरह इस्तेमाल करता था vector<vector<Cell>> hexCells लेकिन मैं सभी एसटीएल कंटेनरों के साथ रैंडम एक्सेस इटरेटर के साथ काम करना चाहता हूं।

2
Muhammedogz 11 जिंदा 2021, 19:30

2 जवाब

सबसे बढ़िया उत्तर

आप एक टेम्पलेट टेम्प्लेट पैरामीटर, यानी एक टेम्पलेट पैरामीटर पर भरोसा करके HexAdapter<std::vector> सिंटैक्स प्राप्त कर सकते हैं, जो बदले में, एक क्लास टेम्प्लेट< है /em> (या एक उपनाम टेम्पलेट):

struct Cell { /* ... */ };

template<template<typename...> class Cont>
class HexAdapter {
   Cont<Cont<Cell>> hexCells;
   /* ... */
};

क्लास टेम्प्लेट HexAdapter (यानी, Cont पैरामीटर के लिए तर्क) के लिए टेम्प्लेट तर्क स्वयं एक क्लास टेम्प्लेट होना चाहिए (जैसे, std::vector या std::deque):

auto main() -> int {
   HexAdapter<std::vector> foo;
   HexAdapter<std::deque> bar;
}
2
眠りネロク 11 जिंदा 2021, 22:01
1
एक सच्चे नायक <3 धन्यवाद
 – 
Muhammedogz
11 जिंदा 2021, 22:14

आप अपने पहले उत्तर के साथ सही हैं। टेम्प्लेट के साथ, आप कमोबेश, आपके मामले में, T को टेम्प्लेट प्रकार के रूप में पारित किए गए किसी भी चीज़ से बदल देते हैं। std::vector के मामले में, आपके पास std::vector<std::vector<Cell>> hexCells के रूप में एक सदस्य होगा

-1
Hawkeye5450 11 जिंदा 2021, 19:46
लेकिन मैं हर समय के लिए सेल निर्दिष्ट नहीं करना चाहता। साथ ही जब मैं इस तरह उपयोग करता हूं, कंपाइलर कार्यान्वयन में त्रुटि देता है जो आम तौर पर वेक्टर के साथ काम करता है।
 – 
muhammed oğuz
11 जिंदा 2021, 19:50