Расширение класса, делегирование операторов и присваивание?

В двух словах … в моем приложении мы используем boost::filesystem::path много. В основном это работает очень хорошо, ЗА ИСКЛЮЧЕНИЕМ, если кто-то решит быть милым и сослаться на не-юникодное имя файла в windows (скажем, по какой-то причине я не могу понять, у кого-то есть имя файла Shift-JIS).

Как говорится, невежество — это блаженство, и я думал, что смогу обойти это, если сделаю что-то вроде (Имеет ли это смысл, кстати?):

namespace fs = boost::filesystem;

class utf8Path : public fs::path {

public:
utf8Path () : fs::path () {};
utf8Path (std::string path) : fs::path(UnicodeUtil::convertToUTF8(path)) {};
}

Конечно, я не принимал во внимание все различные назначения и подобные операторы.

Предположим, что то, что я написал выше, имеет смысл, а не неработающий код … возможно ли распространить этот подход на другие версии конструктора, операторов присваивания и тому подобное?

0

Решение

Обычно плохой дизайн — наследовать, когда композиция одинаково хороша или когда вы не переопределяете виртуальные методы.
В приведенном примере это вряд ли оправдывает новый класс в первую очередь. Просто вызовите конвертацию в тех местах, где это необходимо, вместо использования utf8path.

Хотя я не знаком с этим, похоже, есть некоторая поддержка codec_cvt.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]