Just realized that there's a better way to go about this..
Function Templates
The only 'ugly' thing is that I have to implement the function body in the header file - I can't have the definition in a H file and the implementation in a CPP file (without resorting to including the cpp file in the header file) :mad:
Anyhow, the final function body is short and sweet - it avoids maintenance issues since I just need to ensure that any new type that the function needs to deal with conforms to two standards:
1. The new object must be derived from pdfObj
2. The new object must have a copy constructor
The final code appears inside the class definition thusly:
template <typename T> void addItem(const T *newItem)
{
pdfObj *item = new T(*newItem);
mArray->push_back(item);
}