mardi 18 septembre 2018

How can I fix my compilation errors with this variadic template

I am learning to code with variadic template and wrote a simple variadic template to experiment. The compiler complains about the m_bindingObj member variable with template argument 1 is invalid. What I am missing?

#include <iostream>
#include <functional>

class ClassA
{
public:

   static ClassA * construct(int varA, int varB, int varC)
   {
      return new ClassA(varA, varB, varC);
   }


   ClassA(int varA, int varB, int varC)
      : m_varA(varA)
      , m_varB(varB)
      , m_varC(varC) {}

   static std::function<ClassA *(int, int, int)> getBinding() { return std::bind(&ClassA::construct, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); }

   int m_varA;
   int m_varB;
   int m_varC;
};


template <typename T>
class ToolFactory
{
public:

   template <typename... Args>
   static T * invoke(Args... args)
   {
      std::function<T*(Args...)> creator = getCreator<Args...>();
      return creator(args...);
   }

   template <typename... Args> static std::function<T*(Args...)> getCreator() {
      return T::getBinding();
   }
   template <typename... Args> static std::function<T*(typename Args...)> m_bindingObj;
};

template <typename T> ToolFactory<T>::m_bindingObj;

int main()
{
   ToolFactory<ClassA>::invoke(1, 2, 3);

    return 0;
}

Aucun commentaire:

Enregistrer un commentaire