Bueno, le he estado buscando, pero no le he dado en el clavo, y es que nunca entendi muy bien las plantillas avanzadas en C++
. basicamente me gustaria que alguien me dijera a que traduce la siguiente plantilla:
class MemberFunctionSlot
{
public:
virtual ~MemberFunctionSlot() {};
virtual bool execute(const EventArgs& args) = 0;
};
template<typename T>
class MemberFunctionPointer :
public MemberFunctionSlot
{
public:
typedef bool (T::*MemberFunction)(const EventArgs&);
public:
MemberFunctionPointer() :
d_undefined(true)
{}
MemberFunctionPointer(MemberFunction func, T* obj) :
d_function(func),
d_object(obj),
d_undefined(false)
{}
virtual ~MemberFunctionPointer() {}
virtual bool execute(const EventArgs& args)
{
if(!d_undefined) return (d_object->*d_function)(args);
return false;
}
protected:
MemberFunction d_function;
T* d_object;
bool d_undefined;
};
Aqui pongo la aproximacion que he hecho en C#:
public class MemberFunctionSlot
{
public virtual bool execute(EventArgs args);
}
public class MemberFunctionPointer<T> : MemberFunctionSlot
{
public bool MemberFunction(EventArgs args);
public MemberFunctionPointer()
{
d_undefined(true);
}
public MemberFunctionPointer(MemberFunction func, T obj)//Esta linea me da error
{
d_function(func);
d_object(obj);
d_undefined(false);
}
public virtual bool execute(EventArgs args)
{
if (!d_undefined) return (d_object.d_function)(args);
return false;
}
protected MemberFunction d_function;//esta linea me da error
protected T d_object;
protected bool d_undefined;
}
El error que me marca es el siguiente:
C:\CvsProjects\proyecto-x\alfa\jubilee\QuickGUI\src2\QuickGUIMemberFunctionPointer.cs(36,38): error CS0118: 'Cm.QuickGUI.MemberFunctionPointer<T>.MemberFunction(System.EventArgs)' es 'método' pero se utiliza como 'tipo'
C:\CvsProjects\proyecto-x\alfa\jubilee\QuickGUI\src2\QuickGUIMemberFunctionPointer.cs(50,19): error CS0118: 'Cm.QuickGUI.MemberFunctionPointer<T>.MemberFunction(System.EventArgs)' es 'método' pero se utiliza como 'tipo'
Si alguien me puede iluminar que estoy haciendo mal y como lo puedo arreglar, se lo agradecere
Saludos