the template guide geeksforgeeks clase c++ templates template-templates

c++ - template - Plantilla de parámetros de plantilla sin especificar el tipo interno.



template function c++ (2)

Quiero saber si es posible tener un código que tenga el siguiente comportamiento:

int main() { func<vector>(/*some arguments*/); }

Es decir, quiero que el usuario pueda especificar el contenedor sin especificar el tipo en el que opera.

Por ejemplo, algunos códigos (meta) (que no funcionan con lo anterior) que podrían definir la func serían los siguientes:

template<typename ContainerType> int func(/*some parameters*/) { ContainerType<int> some_container; /* operate on some_container here */ return find_value(some_container); }


La sintaxis es

template <template <typename...> class ContainerType> int func(/*some parameters*/) { // Your code with ContainerType<int> }

Nota: la class no puede ser reemplazada por typename (hasta c ++ 17).

No puede simplemente usar el typename lugar del typename... de typename... Debido a que std::vector toma Type and Allocator (por defecto): std::vector<T, Allocator>


Prueba esto:

template<template<typename,typename> class ContainerType> int func (/*some parameters*/) { }

Necesita dos parámetros de plantilla interna ya que std::vector se define como:

template < class T, class Alloc = allocator<T> > class vector;