Ok, you should leave them empty.
But, now that you mention the MDGModifier::commandToExecute(), this is also a possibility.
You'd create a member variable of type MDGModifier in your MPxCommand class.
class MPxMyCommand :: MPxMyCommand {
MDGModifier mod;
doIt()
undoIt()
redoIt()
}
During your doIt() you execute
mod.commandToExecute(...);
mod.doIt();
During your undoIt() you execute
mod.undoIt();
During your redoIt() you execute
mod.redoIt();
That's a really clean implementation, quite easy. You'll be dealing a lot with MDGModifier when you create/delete nodes and/or create/destroy connections from within your plug-in, so you might want to use it now to use it a bit.
Without mel it would look like
class MPxMyCommand :: MPxMyCommand {
bool newVis;
bool oldVis;
doIt()
undoIt()
redoIt()
}
During your doIt() you execute
newVis = newValueFromArg; // store new value
plug.getValue(oldVis) // store original value
plug.setValue(newVis)
During your undoIt() you execute
plug.setValue(oldVis)
During your redoIt() you execute
plug.setValue(newVis)