Расширение класса, делегирование операторов и присваивание?
В двух словах... в моем приложении мы используем 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 ответ
Обычно плохой дизайн - наследовать, когда композиция одинаково хороша или когда вы не переопределяете виртуальные методы. В приведенном примере это вряд ли оправдывает новый класс в первую очередь. Просто вызовите конвертацию в тех местах, где это необходимо, вместо использования utf8path.
Хотя я не знаком с этим, похоже, есть некоторая поддержка codec_cvt.