Перефразированный вопрос
Я обнаружил, что мой первоначальный вопрос был недостаточно ясен, и респонденты неправильно поняли мою проблему.Итак, позвольте мне попытаться уточнить:
Допустим, у меня есть два класса:
struct C { void(*m_func)(C*); };
struct D { std::function<void(D*)> m_func; };
Теперь я хочу сделать общую версию двух, поэтому я делаю что-то вроде этого:
template<typename Func>
struct G
{
Func m_func;
};
Но сейчас я не знаю, как создать экземпляр этого класса:
G<void(*)(G*)> c; //error
G<std::function<void(G*)>> d; //error
G<void(*)( G<void(*)(G<???>*)> *)> c; //???
G<std::function<void( G<std::function<void(G<???>*)>> *)>> d; //???
Оригинальный вопрос:
Привет,
У меня есть шаблонный класс, который может принимать указатель на функцию или объект std :: function в качестве параметра.Все в порядке, пока эта функция не использует указатель класса шаблона в своей подписи:
#include <functional>
template<typename Func>
class C
{
public:
C() {}
Func m_func;
};
void foo()
{
C<void(*)(C*)> c;
C<std::function<int(C*)>> d;
}
Соответствующие ошибки компилятора:
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
Как решить эту проблему?