String コンストラクタ を読んでいて思ったこと。
わかりにくい!
例えばこれ! String コンストラクタ (Char*)
Char * って System::Char なので Unicode だろうから、WCHAR すなわち wchar_t というところまではすぐにわかるけどね。System::Char の pointer って正直何よ? って感じが。。。
とはいえ、C++ の宣言は下記になっているから許せるけど。
[CLSCompliantAttribute(false)]
public:
String(
wchar_t* value
)
でも、最初に探すとき wchar_t * (WCHAR *, LPWSTR) で調べると思うんですよね。C++/CLI 以外でこんな constructor まず使わないと思うので、wchar_t * でいいんじゃないかと。
もっとわかりにくいのは String コンストラクタ (SByte*) ! 何これ! System::SByte 構造体 なんて普通知らんじゃないかな?
で、参照すると IEquatable 。 ふむふむ、signed char と互換性があるのね。って、ここまで references 掘り下げないとわからないのかよ!
String コンストラクタ (signed char *) にしてくれないかなぁ~と。
ここまでやってようやくわかったんだけど、要するに System::String constructor 使って Unicode だろうと MBCS だろうと C の文字列から System::String に変換できるのね。
char string1[] = "あいうえお";
wchar_t string2[] = L"あいうえお";
System::String ^ clrString1 = gcnew System::String(string1);
System::String ^ clrString2 = gcnew System::String(string2);
System::Console::Write("MBCS:\t{0:s}\nUnicode:\t{1:s}\n", clrString1, clrString2);
上記ができる説明をしたつもりだったけど、実際は全然違うみたい。
signed char string1[] = "あいうえお";
にすると compile eroor になるし。。。正確な情報どなたか教えてください。