Можно ли в C++ реализовать идею "шаблона шаблона"?

Например, я делаю кастомный контейнер, включающий в себя другой шаблон контейнера, и я хочу определить в шаблоне не только тип ключа и значений, но и тип самого контейнера, например hash или map. Думаю, лучше всего мою мысль продемонстрирует пример:

template <typename C, typename K, typename T>
class SuperContainer
{
public:
    void insert(const K &key, const T &value) {
        _innerContainer.insert(key, value);
    }
    T at(const K &key) const {
        return _innerContainer.value(key);
    }

private:
    C<K, T> _innerContainer;
};

int main(int argc, char *argv[])
{
    SuperContainer<QHash, int, QString> sc1;
    SuperContainer<QMap, int, QString> sc2;
//...

В таком виде это нерабочий код, но как реализовать саму эту идею другими средствами?


Ответы (1 шт):

Автор решения: KoVadim

Есть такая штука как шаблонный параметр. Я чуточку поправил Ваш код и теперь он компилируется

template <template<typename X1, typename X2> class C, typename K, typename T>
class SuperContainer
{
public:

Если компилятор поддерживает 17 стандарт, то вместо class можно писать уже typename. Это было одно с тех мест, где typename != class.

template <template<typename X1, typename X2> typename C, typename K, typename T>
class SuperContainer
{
public:
→ Ссылка