I need to deep copy an appender in log4cxx however every appender has a private copy constructor and operator=
so I can't do anything. At the same time I can call the method newInstance
to create a default instance of the same class. How can I replace a long if instanceof statements in this case? Just an example:
class FileAppender {
public:
FileAppender();
~FileAppender();
...getter.....
...setter.....
protected:
....few variables....
private:
FileAppender(const FileAppender& o);
FileAppender& operator=(const FileAppender& o);
}
class RollingFileAppender: public FileAppender {
public:
RollingFileAppender();
~RollingFileAppender();
...getter.....
...setter.....
protected:
....few variables....
private:
RollingFileAppender(const RollingFileAppender& o);
RollingFileAppender& operator=(const RollingFileAppender& o);
}
What I have now:
if ((*it)->instanceof(RollingFileAppender::getStaticClass())) {
//cast, create new instance and copy using getter and setter
} else if ((*it)->instanceof(FileAppender::getStaticClass())) {
//cast, create new instance and copy using getter and setter
}
......and so on........
How can I replace the if instanceof? Usually I use a visitor pattern but I can't change the library.