ho diverse classi template Impl
(con alcuni metodi astratti) che sono parzialmente attuato in file CPP così che ho bisogno di istanziare esplicitamente i miei modelli per il linker per trovarlo, in questo modo:modello istanziazione esplicita con i modelli variadic
template class Impl<T0>;
template class Impl<T1>;
template class Impl<T2>;
...
template class Impl<Tx>;
All'aumentare del numero di tipi Tx
, mi piacerebbe trovare un modo migliore di espandere manualmente questi elenchi di istanze esplicite in tutti i file necessari. Ho pensato che avrei potuto utilizzare i modelli variadic per questo, quindi ho provato la seguente:
template <template <class> class, class...>
struct type_map;
template <template <class> class BaseT, class... Ts>
struct type_map<BaseT, std::tuple<Ts...>> {
using type = std::tuple<BaseT<Ts>...>;
};
typedef std::tuple<T0, T1, T2> MyTypes;
E nel file CPP:
template class type_map<Impl, MyTypes>;
Tuttavia, questo non ha istanziare i modelli come ho inteso (il linker si è lamentato dei simboli mancanti).
C'è un modo per far funzionare questo approccio (cioè creare un'istanza del modello senza creare un'istanza dell'oggetto) o un approccio completamente diverso che potrebbe risolvere il mio problema in questa situazione?
provi a creare dll? forse devi aggiungere la macro di esportazione al tuo tipo 'type_map' –
@Angew Ho diverse classi che funzionano così, che è la ragione del mio problema. Ho cercato di formulare la mia domanda un po 'più chiara. – fschoenm
@vlad_tepesch No, non uso le DLL. Questo è solo legato al problema che il compilatore non genera istanze di template che sono necessarie su altre unità di compilazione. – fschoenm