std::string s;
Coder<ucs2>(ws).encode<utf8>(s);
std::string s = utf8(new ucs2(ws)).c_str();
std::string s = encode(ws, new ucs2, new utf8);
std::string s = Coder(new ucs2(ws)).encode(new utf8);
преобразование строк в from/to разные кодировки.
Что является более оптимальным (не по перфомансу а в общем.)
каждая строчка подразумевает совершенно определенную реализацию
1) шаблоны (причем не очень хорошие — функций)
2) наследование интерфейса + конструкторы копирования
3) наследование интерфейса + наменьшая связанность кода
4) гибрид 1+2 без шаблонов и копирования, но наследование от базового функционального класса
5) наверное можно чтото еще придумать..
мне кажется что с точки зрения правильного проектирования вариант 3 оптимален.