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