I've создал следующий класс Event:C++ магазин функтор в классе
Event.h
#ifndef EVENT_H
#define EVENT_H
#include<string>
template<typename T>
class Event
{
public:
T fnktptr; //Error: field ‘Event<int()>::fnktptr’ invalidly declared function type
Event();
virtual ~Event();
};
#endif // EVENT_H
Event.cpp
#include "Event.h"
template<typename T>
Event<T>::Event()
{
//ctor
}
template<typename T>
Event<T>::~Event()
{
//dtor
}
// No need to call this TemporaryFunction() function,
// it's just to avoid link error.
void TemporaryFunction()
{
Event<int> TempObj;
}
Теперь я проверил это с помощью следующего кода и он работает:
Event<int> event;
int t = 5;
event.fnktptr = t;
Но fi наконец, я хочу использовать его с функтором, как это:
Event<decltype(consumeInt)> event;
event.fnktptr = consumeInt;
Но теперь я получаю сообщение об ошибке в файле Event.h:
T fnktptr; //Error: field ‘Event<int()>::fnktptr’ invalidly declared function type
Не должен 'Т fnktptr;' 'быть Т * fnktptr;'? – xvan
Да, вы не можете иметь объект типа функции, он не разрешен. – SergeyA
Я попробовал теперь с 'T * fnktptr' и теперь я получаю эти ошибки:' неопределенную ссылку на событие :: Event() ' произошла ошибка в' Event событие, ' Это моя функция consumeInt: 'Событие событие;' –