Rephrasable Question
I found that my initial question was not clear enough, and the defendants misunderstood my problem. So let me clarify:
Let's say I have two classes:
struct C { void(*m_func)(C*); };
struct D { std::function<void(D*)> m_func; };
Now I want to create a generic version of the two, so I am doing something like this:
template<typename Func>
struct G
{
Func m_func;
};
But now I do not know how to instantiate this class:
G<void(*)(G*)> c;
G<std::function<void(G*)>> d;
G<void(*)( G<void(*)(G<???>*)> *)> c;
G<std::function<void( G<std::function<void(G<???>*)>> *)>> d;
The original question:
Hi,
I have a template class that can take a function pointer or a std :: function object as a parameter. Everything is fine until this function uses the template class pointer in its signature:
#include <functional>
template<typename Func>
class C
{
public:
C() {}
Func m_func;
};
void foo()
{
C<void(*)(C*)> c;
C<std::function<int(C*)>> d;
}
Relevant compiler errors:
error C2955: 'C' : use of class template requires template argument list
error C3203: 'function' : unspecialized class template can't be used as a template argument for template parameter 'Func', expected a real type
error C2955: 'std::tr1::function' : use of class template requires template argument list
How to solve this problem?
source
share