#include <iostream>
#include <typeinfo>

template<typename T>
void create()
{
   std::cout << "create called with " << typeid(T).name() << std::endl;
}

template<typename...>
struct caller;


template<typename T, typename...Rest>
struct caller<T, Rest...>
{
     static void call()
     {
        create<T>();
        caller<Rest...>::call();
     }
};
template<>
struct caller<>
{
     static void call()
     {
     }
};

template<typename...classes>
void createObject(){
      caller<classes...>::call();
}

int main()
{
      createObject<int,float, short>();
}