Расширение класса, делегирование операторов и присваивание? - PullRequest
0 голосов
/ 12 сентября 2018

В двух словах ... в моем приложении мы используем 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)) {};
}

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

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

1 Ответ

0 голосов
/ 12 сентября 2018

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

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

...