Можно ли в 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: