Your question could use a little clarification on whats being attempted (sample use code, for instance.) But here's a quick demo on how to do what you've laid out in a variadic way:
// in class definition
template <typename Itf, typename Class, typename ...Args>
void Register();
// in implementation section
template <typename Itf, typename Class, typename ...Args>
void Resolver::Register()
{
std::function<void*()> creator = [=](){ return new Class(this->Create<Args>()...);};
m_creationFunctions[std::string(typeid(Itf).name())]=creator;
}
I tested this quickly with the following on VC++12 and everything looked okay:
struct TestStruct {
TestStruct(int * a, int * b, int * c)
: a_(a), b_(b), c_(c) {
}
int * a_;
int * b_;
int * c_;
};
// ...
IoC::Register testRegister;
testRegister.Register<int, TestStruct, int, int, int>();
It's a little odd that your Create returns pointers (hence the TestStruct definition holding a bunch of pointers) rather than just the type, but I don't know the complete picture here.