プログラムの汎用性は命なので
文字列とか入出力の
汎用性を持たせたい

でもここで問題となるのが文字コードの問題だ
ウィンドウズの関数などは文字コードを正しく使わないと
コンパイラはエラーを掃く
(めんどくせぇ・・・)

VC++のコンパイラの設定でマルチコード文字かUnicode文字の指定ができる
中にはUnicode専用の関数などもたまーにあったりして
切り替え用のコードとか書くにしても非常にめんどくさい
ならば、最初から両方に対応できるコードを書くしかない
しかもできるだけ楽して

正直Unicode、マルチバイトとかを
意識するコードを書きたくないので
次のようなヘッダーを作ってみた
多分困ってる人も多いと思うのでご利用はご自由に

	//---------------------Unicode.h-----------------------------------//
	#ifndef _UNICODE_H_
	#define _UNICODE_H_
	
	#include <iostream>
	#include <fstream>
	#include <sstream>
	#include <iomanip>
	#include <tchar.h>
	#include <string>
	#include <locale.h>
	
	
	// 文字列はUnicode、マルチバイト文字に対応するためにTCHAR型がお勧めです
	// _T("文字列")マクロで囲ってやるとTCHAR文字列として扱えます
	
	// 標準出力 _tprintf ,printf ,wprintf
	// バッファに整形出力 _stprintf ,sprintf ,swprintf
	// 文字列比較 _tcscmp ,strcmp ,lstrcmp
	
	// 標準で欲しいレベルなので
	// std名前空間として扱う
	_STD_BEGIN
	
	// tstring型を定義
	typedef std::basic_string<TCHAR> tstring;
	
	// tstream型の定義
	typedef std::basic_ostream<TCHAR> tostream; // 標準出力ストリーム
	typedef std::basic_istream<TCHAR> tistream; // 標準入力ストリーム
	typedef std::basic_ostringstream<TCHAR> tostringstream; // 文字列出力ストリーム(整形格納用バッファ)
	typedef std::basic_istringstream<TCHAR> tistringstream; // 文字列入力ストリーム(整形取得用バッファ)
	typedef std::basic_ifstream<TCHAR> tifstream; // ファイル入力ストリーム
	typedef std::basic_ofstream<TCHAR> tofstream; // ファイル出力ストリーム
	typedef std::basic_fstream<TCHAR> tfstream; // ファイルストリーム
	
	
	// 標準出力の切り替えマクロ
	#ifdef UNICODE
	#define tcin wcin // 入力
	#define tcout wcout // 出力
	#define tcerr wcerr // エラー
	#define tclog wclog // ログ
	#else
	#define tcin cin // 入力
	#define tcout cout // 出力
	#define tcerr cerr // エラー
	#define tclog clog // ログ
	#endif
	
	_STD_END
	
	#endif // _UNICODE_H_
	//---------------------------------------------------------------------//

あえてstd名前空間に定義しました
使い方は下のように使います。

	#include "Unicode.h"
	
	// ストリームを引数に渡すときは
	void Output(std::tostream& tos) {
		tos << "Hello World!" << std::endl;
	}
	
	int main() {
		std::tcout << "テスト" << std::endl;
		const TCHAR* filename = _T("TestOutput.txt");
		
		Output(std::tcout); // システムが用意した標準出力 tcout に出力する。
		std::tofstream tofs(filename); // ファイルへの出力ストリームオブジェクト tofs を作成する。
		Output(tofs); // tofs を渡して、ファイルに出力する。
		return 0;
	}
	
選択肢 投票
(^ω^)ktkr 9  
普通 4  
。(`ω´#)。なんじゃこりゃああ 5  

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-04-17 (月) 19:01:13