Как можно использовать класс шаблона для контейнера контейнера?

Я хочу использовать свой класс с шаблоном. в основном:

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 Но я хочу работать со всеми контейнерами STL с итератором произвольного доступа.


person muhammed oğuz    schedule 11.01.2021    source источник


Ответы (1)


Синтаксис HexAdapter<std::vector> можно получить, полагаясь на параметр шаблона, т. е. параметр шаблона, который, в свою очередь, является шаблоном класса ( или шаблон псевдонима):

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;
}
person 眠りネロク    schedule 11.01.2021
comment
Настоящий герой ‹3 Спасибо - person muhammed oğuz; 11.01.2021