こういうのはどうだろう: template <class Encoding, class Char = typename Encoding::char_type, class Traits = std::char_traits<Char>, class Allocator = std::allocator<Char> > class basic_estring : public std::basic_string<Char, Traits, Allocator> , public Encoding { };つまり自分の文字エンコーディングが何であるか知っている文字列クラス。 大抵のプログラムで使われる文字エンコーディングは決め打ちで良いだろうから、こんな感じのものを用意しておけば: template <typename Char = char16_t> class encoding_utf