【发布时间】:2016-03-08 18:52:40
【问题描述】:
我创建了以下事件类:
事件.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;
但最后,我想将它与这样的仿函数一起使用:
Event<decltype(consumeInt)> event;
event.fnktptr = consumeInt;
但现在我在 Event.h 文件中遇到错误:
T fnktptr; //Error: field ‘Event<int()>::fnktptr’ invalidly declared function type
【问题讨论】:
-
不应该是
T fnktptr;是T * fnktptr;? -
是的,你不能有一个函数类型的对象,这是不允许的。
-
我现在用
T* fnktptr尝试过,现在我得到这些错误:undefined reference to Event<int ()>::Event()错误发生在Event<decltype(consumeInt)> event;这是我的函数consumeInt:Event<decltype(consumeInt)> event; -
@SergeyA:我的问题有什么可行的替代方案? (将仿函数存储在类中以供进一步使用。)
-
1) 你不能有类型函数的成员。 2)当您将其固定为指针时,您必须在头文件中定义模板。
标签: c++ functor template-classes