2016-11-30 8 views
0

C++で書かれたWindowsデスクトップのための全く新しいプロジェクトに取り組み始めています。私はWindowsプログラミングを学んだとき、コードを変更せずにANSIまたはUnicodeバージョンのプログラムをビルドできるので、TCHARを使用することは大きな改善点です。しかし、私はANSIバージョンを構築するためのオプションを実際に使用したことはありません。さらに、C++の標準ライブラリでは、TCHARはありません。std :: string、std :: stringstreamなどのtypedefを作成する必要があります。だから私は今、wchar_tに賛成してTCHARを放棄することを考えています。私は以下の利点と欠点を集めました。今日TCHARを使うべきですか?

利点:

  • TCHARはマクロですので、私はそれを使用しない場合は、フロントエンドコンパイラとIntelliSenseは、より良い結果が得られます。
  • 変数の型が何であるかをより明確に示しています。
  • L ""は_T( "")よりも入力が容易です。

短所:

  • 文字タイプに関するモジュール性の損失(私は本当にANSIバージョンを必要としないにもかかわらず、私はきちんと機能する抽象文字の種類を使用して検索すると、どのような場合将来はUTF-8またはUTF-32バージョンが必要になります)。
  • 私はGetWindowTextWのようなWを使っていくつかのAPI関数を後処理する必要があります。

そして、私の質問:

  • 私は上記のものよりもTCHARを使用するためのC++標準ライブラリの簡単な方法はありますか?これらのtypedefを持つ標準ヘッダファイルのように?
  • 私の推論は正しいと思いますか?
  • 重要な点はありますか?
  • 今日の最先端のソリューションとは何ですか?プロフェッショナルなWindowsプログラマはまだTCHAR(新しいコード)を使用していますか?
  • TCHARを削除した場合、_T( "")の代わりにL ""またはu ""を書く必要がありますか?
+0

http://stackoverflow.com/questions/234365/is-tchar-still-relevant – Deduplicator

+0

リンクをありがとう、私もそれを見つけましたが、私の質問は少し異なり、とにかく私はそう思わない2008年の回答は2016年の最先端の解決策として自動的に受け入れられます。 – z32a7ul

+2

IMOそれは余計な努力の価値はありません。 TCHARが完璧に実装されていれば別の話だが、そうではない。私たちの会社では、std :: stringを使用し、UTF-8文字列を使用しています.Win32に対処する必要があるときはwchar_tに変換します。 –

答えて

1

現代のウィンドウでは、すべてのANSI関数が内部でchar*wchar_t*に変換し、同じ機能のユニコードバージョンを呼び出しています。基本的にwchar_tの代わりにTCHARを採用することで、何も得られませんが、奇妙な構文に対処する必要があります。

関連する問題