Plantillas instanciadas y SWIG

Tengo el siguiente problema que no sé cómo resolver. Quiero crear un contenedor Java usando SWIG para estas dos clases que están en el mismo archivo:

utilidades.h :

template<class T>
class EncoderInterface
{
 public:
  virtual ~EncoderInterface()
  {
  }
  virtual const cdap_rib::SerializedObject* encode(const T &object) = 0;
  virtual T* decode(
      const cdap_rib::SerializedObject &serialized_object) const = 0;
};

class IntEncoder : public rib::EncoderInterface<int>
{
 public:
  const cdap_rib::SerializedObject* encode(const int &object);
  int* decode(const cdap_rib::SerializedObject &serialized_object) const;
};

Luego hago los tragos habituales en .i :

%{
#include "utilities.h"
%}

%include "utilities.h"

Y dice:

Warning 401: Nothing known about base class 'EncoderInterface< int >'. Ignored.
Warning 401: Maybe you forgot to instantiate 'EncoderInterface< int >' using %template.

Si trato de usar la plantilla% template así:

%template(IntEncoder) EncoderInterface<int>;

Warning 302: Identifier 'IntEncoder' redefined (ignored) (Renamed from 'EncoderInterface< int >'),
utilities.h:302: Warning 302: previous definition of 'IntEncoder'.

IntEncodertiene código en utilities.cc y quiero permitir que el usuario de las utilidades cree nuevas instancias de plantilla o use la dada si lo desea. Realmente no quiero cambiar el nombre de la, IntEncoderpor lo que cualquier usuario de la biblioteca (proveniente de C ++ o de Java) usará los mismos nombres.

He leído algo sobre la división de archivos (mantener la EncoderInterfaceplantilla en un archivo y la creación de instancias en otro) ¿es esta la única solución a este problema? No quiero crear nuevos archivos si puedo evitarlo.

Respuesta 1

Leí que HashMap tiene la siguiente implementación: matriz principal ↓ [Entrada] → Entrada → Entrada ← implementación de lista vinculada [Entrada] [Entrada] → Entrada [Entrada] [nulo] Entonces, tiene una matriz de Entrada ...

Obtuve un grupo de enteros y quiero contar la cantidad de enteros max () que contiene mi transmisión. El método max () proviene de la API Stream. Iba por algo como esto int count = Arrays ...

¿Alguien puede explicar las posibles formas de que se produzcan pérdidas de memoria al usar jsp y servlets en modo de desarrollo? obteniendo una excepción de espacio pergemn después de comenzar a usar jsp y servlets. eclipse....

Estoy usando EGit con eclipse para sincronizar mi entorno de desarrollo con dos computadoras diferentes. Tengo un pequeño problema con el que originalmente creé por proyecto y lo envié a mi repositorio remoto de git (que ...