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