В настоящее время я работаю над заголовком С++ для кодирования и декодирования текста. Если быть точным: UTF-8, UTF-16, UCS-2 и UTF-32. Но я дошел до того, что мои знания C++ больше не помогут:
Я хотел бы использовать абстрактный класс для декодирования и кодирования, создавая базовые классы для каждого кодека. Затем, при использовании любой функции, связанной с кодированием или декодированием, разработчик должен иметь возможность просто передать функции пользовательский тип данных.
Проблема в том, что я понятия не имею, как это сделать на самом деле. В конце концов, вы не можете передать статический класс в качестве параметра. Но я также не хочу ничего жестко кодировать; разработчик также должен иметь возможность добавлять любой кодек без особых проблем и без изменения моего заголовка.
Кроме того, он должен быть максимально легким. Код будет выглядеть примерно так:
namespace Encoding {
class Encoder {
public:
virtual std::string Encode(std::string sOriginal) = 0;
};
// Derived classes like UTF8 and UCS2 here
}
void OutputEncoded(std::string s, Encoder enc) {
std::cout << enc.Encode(s);
}
int main() {
OutputEncoded("Hellö Wörld!", Encoding::UTF8);
}
есть идеи как это сделать? Может быть, способ без создания объекта, а только со статическими методами? Или мне нужно использовать объект с указателем?
int main() { Derived d; Test(&d); }
Передача по ссылке более уместна, чем по указателю, посколькуnullptr
является неправильным вводом. 23.04.2020