2012-03-20 10 views
1

私はC++ BuilderコードをBCB2010に移行しており、LeftStr()RightStr()への呼び出しを適切な関数に置き換える必要があります。これはUnicodeStringのオーバーロードがないためです。あなたが警戒するのは正しいですUnicodeString型のLeftStr()UnicodeString型の場合

AnsiLeftStr()が動作しているように見えますが、名前は私をギョッとされて...

答えて

3

。代わりにUnicodeStringのSubStringメソッドを使用してください。

+1

Ansi ...()は実際にUnicodeString引数を持ち、返します。名前を変更していないか、少なくともUnicodeを持っていないのは本当にばかげているようです。 –

3

Ansi...()の機能はすべて、CB2009のUnicodeに移行されました。命名計画は、2009年以前のコードとの下位互換性を維持するために保存されました。

あなたがAnsiLeftStr()代わりのLeftStr()を呼び出すためのコードを変更したくない場合は、単に例えば、内部AnsiLeftStr()またはUnicodeString::SubString()を呼び出して、独自のLeftStr()機能を実装できます。

UnicodeString __fastcall LeftStr(const UnicodeString &AText, const int ACount) 
{ 
    return AnsiLeftStr(AText, ACount); 
} 

を。

UnicodeString __fastcall LeftStr(const UnicodeString &AText, const int ACount) 
{ 
    return AText.SubString(1, ACount); 
} 
+0

はい、[AnsiLeftStr](http://docwiki.embarcadero.com/VCL/en/StrUtils.AnsiLeftStr)を使用してください。 [LeftStr](http://docwiki.embarcadero.com/VCL/en/StrUtils.LeftStr)は実際には危険です。AnsiStringまたはWideStringのいずれかをとります。自分自身を定義してスコープ内にあることを確認して呼び出されるようにする場合は注意してください。 –

+0

私はその問題を避けるために独自のネームスペースにカスタム実装を配置します。 –

関連する問題