Im trying to create an undoredo manager that doesnt matter on what object you pass in. But I cant figure out how to do this in C#. I would like to do something like a pointer to the Original Object and only change where that pointer is pointing to.
C# code
public class UndoableObject<T> : IUndoableAction
{
private T UndoObject;
private T ClonedObject;
private readonly string _name;
public string Name
{
get { return _name; }
}
public UndoableObject(ref T ObjectToUndo, string name)
{
_name = name;
UndoObject = ObjectToUndo;
ClonedObject = ObjectExtensions.Copy<T>(ObjectToUndo);
}
public void Redo()
{
T temp = ObjectExtensions.Copy<T>(UndoObject);
UndoObject = ClonedObject;
ClonedObject = temp;
}
public void Undo()
{
T temp = ObjectExtensions.Copy<T>(UndoObject);
UndoObject = ClonedObject;
ClonedObject = temp;
}
}
A C++ implementation of what i would like to happen
template<typename T>
public class UndoableObject : IUndoableAction
{
private T *UndoObject;
private T *ClonedObject;
private string _name;
public string GetName
{
return _name;
}
public UndoableObject(T *ObjectToUndo, string name)
{
_name = name;
UndoObject = ObjectToUndo;
ClonedObject = &ObjectExtensions.Copy(*ObjectToUndo);
}
public void Redo()
{
T *temp = &ObjectExtensions.Copy(*UndoObject);
delete UndoObject;
UndoObject = ClonedObject;
ClonedObject = temp;
}
public void Undo()
{
T *temp = &ObjectExtensions.Copy(*UndoObject);
delete UndoObject;
UndoObject = ClonedObject;
ClonedObject = temp;
}
}
I know there are probably memory leaks in it but i wrote up the c++ without compiling it. Hopefully I made some sense.