Я хочу создать класс-оболочку на C++, который реализует передачу файлов с использованием FTP, SFTP.Создайте хороший класс оболочки C++, который обертывает множество функций
У меня есть базовый класс FileTransfer
(с помощью curl), который наследуется производным классом FTP
. Мне нужно поддерживать SFTP, поэтому я реализовал другой производный класс SFTP
, который также наследует от FileTransfer
.
Я делаю код класса оболочки по следующим строкам. Однако это не похоже на хороший дизайн. Я относительно новичок в ООП, хотя в прошлом я работал над C.
class Wrapper {
public:
Wrapper(int m_protocol){
protocol = m_protocol;
if (protocol)
pftp = new FTP();
else
psftp = new SFTP();
}
~Wrapper() {
if (protocol)
delete pftp;
else
delete psftp;
}
//Function supported by both ftp/sftp
void do_something(){
if (protocol)
pftp->do_something();
else
psftp->do_something();
}
//FTP specific function
void use_passive(){
assert(protocol);
pftp->use_passive();
}
//SFTP specific function
void ssh_key(){
assert(!protocol);
psftp->ssh_key();
}
private:
int protocol;
FTP *pftp;
SFTP *psftp;
};
Как я могу улучшить эту конструкцию? Как я могу избежать проверки if (protocol)
внутри каждой функции и улучшения качества кода? Должен ли я вместо этого использовать указатели void
для psftp
и 'pftp`?
Редактировать: Я использую оболочку, потому что во многих местах проекта используется существующий FTP-объект, и если я использую отдельный класс для SFTP (без обертки), мне придется добавить if
check каждый раз, чтобы поддерживать SFTP. Я не хочу раскрывать детали (FTP/SFTP) вызывающему.
Почему вы используете wraper? – Vincent
Вам нужна обертка? Похоже, что для большинства из них вы можете просто «FileTransfer *», который является либо «FTP», либо «SFTP *». Определенно не * оба указателя, и определенно не 'void *'. – Barry
Я использую оболочку, потому что во многих местах проекта используется существующий объект FTP, и если я использую отдельный класс для SFTP (без оболочки), мне придется каждый раз добавлять проверку 'if' также поддерживают SFTP. Я хочу, чтобы вызывающие абоненты не знали, является ли это FTP или SFTP. –