基本型の 1 つ (char など) のような新しい型を作成する方法はありますか?
typedef char utf8;
template<typename T>void f(T c);
template<> void f<char>(char c)
{
std::cout << "ascii " << c << std::endl;
}
template<> void f<utf8>(utf8 c)//error C2766: explicit specialization; 'void f<char>(char)' has already been defined
{
std::cout << "utf8 " << c << std::endl;
}
int main()
{
char c1 = 'x';
utf8 c2 = 'g';
f(c1);
f(c2);
}
単一のデータメンバーを含むクラスで可能かもしれないと考えています。そうであれば、それを行う最もクリーンな方法は何であり、コンパイラはそれがプリミティブであるかのように最適化できるでしょうか。
編集: BOOST_STRONG_TYPEDEF を試しましたが、それは基本的なものでうまくいくようですが、新しい型から std::basic_string を作成するにはどうすればよいですか?
BOOST_STRONG_TYPEDEF(char,utf8);
//first try
BOOST_STRONG_TYPEDEF(std::string,utf8_string);
//second try
typedef std::basic_string<utf8, std::char_traits<utf8>,std::allocator<utf8> > uft8_string;
結果の型はすべてのメソッドに対してまだ char を期待しているため、最初のものは実際には機能しません.2番目のものは、コンストラクターと代入演算子の存在を好まないようです:(
新しい char 型を作成する他の方法はまだ試していませんが、BOOST_STRONG_TYPEDEF を使用できない場合、これを回避できますか?