Instantiate() must return a BArchivable*,
regardless of the actual class in which it's implemented.
| Class Overview |
virtual status_t Archive(BMessage* archive,
bool deep = true) const;
The default implementation adds the name of the object's class to
archive's class field. Derived classes
must override Archive() to
augment this implementation by adding, to the
BMessage, data that
describes the current state of the object. Each implementation of this
function should begin by incorporating the inherited version:
/* We'll assume that MyView inherits fromBView. */ status_tMyView::Archive(BMessage*archive, booldeep) {BView::Archive(archive,deep); . . . }
If the class can be instantiated directly from a derived class, it should also add its name to the "class" array:
archive->AddString("class", "MyView");
The deep flag declares whether Archive()
should include objects that "belong" to the archiving object. For example, a
deep BView archive would
include archived forms of the view's children.
Archive() should return B_OK if
it's successful; otherwise, it should
return B_ERROR or a more descriptive error code.
static BArchivable* Instantiate(BMessage* archive);
Derived classes should implement Instantiate() to return a new
BArchivable object that was constructed from the
BMessage archive. For
example:
BArchivable*TheClass::Instantiate(BMessage*archive) { if ( !validate_instantiation(archive, "TheClass") ) returnNULL; return newTheClass(archive);}
Instantiate() must return a BArchivable*,
regardless of the actual class in which it's implemented.
This function depends on a constructor that can initialize the new object
from the archive BMessage.
See "Instantiability" TODO for more information.
The default implementation returns NULL.