fixed String bugs
This commit is contained in:
		
							parent
							
								
									b853bb76cf
								
							
						
					
					
						commit
						24ab490804
					
				|  | @ -4,21 +4,6 @@ | |||
| #pragma comment(lib, "comsuppw.lib") | ||||
| 
 | ||||
| 
 | ||||
| // 将 Unicode 字符串转化为 ANSI 字符串
 | ||||
| static std::string ConvertWide2Ansi(const wchar_t* wstr) | ||||
| { | ||||
| 	std::string str = static_cast<char*>(_bstr_t(wstr)); | ||||
| 	return std::move(str); | ||||
| } | ||||
| 
 | ||||
| // 将 ANSI 字符串转化为 Unicode 字符串
 | ||||
| static std::wstring ConvertAnsi2Wide(const char* cstr) | ||||
| { | ||||
| 	std::wstring str = static_cast<wchar_t*>(_bstr_t(cstr)); | ||||
| 	return std::move(str); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| e2d::String::String() | ||||
| 	: m_str(L"") | ||||
| { | ||||
|  | @ -30,12 +15,7 @@ e2d::String::String(const wchar_t *str) | |||
| } | ||||
| 
 | ||||
| e2d::String::String(const char *cstr) | ||||
| 	: m_str(ConvertAnsi2Wide(cstr)) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| e2d::String::String(const std::string &str) | ||||
| 	: m_str(ConvertAnsi2Wide(str.c_str())) | ||||
| 	: m_str(static_cast<wchar_t*>(_bstr_t(cstr))) | ||||
| { | ||||
| } | ||||
| 
 | ||||
|  | @ -49,11 +29,6 @@ e2d::String::String(const e2d::String &str) | |||
| { | ||||
| } | ||||
| 
 | ||||
| e2d::String::String(const std::wstring &str) | ||||
| 	: m_str(str) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| e2d::String::~String() | ||||
| { | ||||
| 	m_str.clear(); | ||||
|  | @ -67,7 +42,7 @@ e2d::String &e2d::String::operator=(const wchar_t *str) | |||
| 
 | ||||
| e2d::String & e2d::String::operator=(const char *cstr) | ||||
| { | ||||
| 	m_str = ConvertAnsi2Wide(cstr); | ||||
| 	m_str = static_cast<wchar_t*>(_bstr_t(cstr)); | ||||
| 	return *this; | ||||
| } | ||||
| 
 | ||||
|  | @ -77,18 +52,6 @@ e2d::String & e2d::String::operator=(const String &str) | |||
| 	return *this; | ||||
| } | ||||
| 
 | ||||
| e2d::String & e2d::String::operator=(const std::wstring &str) | ||||
| { | ||||
| 	m_str = str; | ||||
| 	return *this; | ||||
| } | ||||
| 
 | ||||
| e2d::String & e2d::String::operator=(const std::string &str) | ||||
| { | ||||
| 	m_str = ConvertAnsi2Wide(str.c_str()); | ||||
| 	return *this; | ||||
| } | ||||
| 
 | ||||
| bool e2d::String::operator==(const wchar_t *str) | ||||
| { | ||||
| 	if (str) | ||||
|  | @ -119,11 +82,6 @@ bool e2d::String::operator ==(const e2d::String &str) | |||
| 	return m_str == str.m_str; | ||||
| } | ||||
| 
 | ||||
| bool e2d::String::operator==(const std::wstring &str) | ||||
| { | ||||
| 	return m_str == str; | ||||
| } | ||||
| 
 | ||||
| bool e2d::String::operator!=(const wchar_t *str) | ||||
| { | ||||
| 	if (str) | ||||
|  | @ -154,11 +112,6 @@ bool e2d::String::operator!=(const e2d::String &str) | |||
| 	return m_str != str.m_str; | ||||
| } | ||||
| 
 | ||||
| bool e2d::String::operator!=(const std::wstring &str) | ||||
| { | ||||
| 	return m_str != str; | ||||
| } | ||||
| 
 | ||||
| wchar_t &e2d::String::operator[](int index) | ||||
| { | ||||
| 	return m_str[static_cast<size_t>(index)]; | ||||
|  | @ -174,7 +127,7 @@ e2d::String e2d::String::operator+(const wchar_t *str) | |||
| e2d::String e2d::String::operator+(const char *str) | ||||
| { | ||||
| 	String temp; | ||||
| 	temp.m_str = m_str + ::ConvertAnsi2Wide(str); | ||||
| 	temp.m_str = m_str + static_cast<wchar_t*>(_bstr_t(str)); | ||||
| 	return std::move(temp); | ||||
| } | ||||
| 
 | ||||
|  | @ -185,13 +138,6 @@ e2d::String e2d::String::operator+(const e2d::String &str) | |||
| 	return std::move(temp); | ||||
| } | ||||
| 
 | ||||
| e2d::String e2d::String::operator+(const std::wstring &str) | ||||
| { | ||||
| 	String temp; | ||||
| 	temp.m_str = m_str + str; | ||||
| 	return std::move(temp); | ||||
| } | ||||
| 
 | ||||
| e2d::String e2d::operator+(const wchar_t *str1, const e2d::String &str2) | ||||
| { | ||||
| 	String temp; | ||||
|  | @ -202,14 +148,7 @@ e2d::String e2d::operator+(const wchar_t *str1, const e2d::String &str2) | |||
| e2d::String e2d::operator+(const char *str1, const String &str2) | ||||
| { | ||||
| 	String temp; | ||||
| 	temp.m_str = ::ConvertAnsi2Wide(str1) + str2.m_str; | ||||
| 	return std::move(temp); | ||||
| } | ||||
| 
 | ||||
| e2d::String e2d::operator+(const std::wstring &str1, const e2d::String &str2) | ||||
| { | ||||
| 	String temp; | ||||
| 	temp.m_str = str1 + str2.m_str; | ||||
| 	temp.m_str = static_cast<wchar_t*>(_bstr_t(str1)) + str2.m_str; | ||||
| 	return std::move(temp); | ||||
| } | ||||
| 
 | ||||
|  | @ -221,7 +160,7 @@ e2d::String & e2d::String::operator+=(const wchar_t *str) | |||
| 
 | ||||
| e2d::String & e2d::String::operator+=(const char *str) | ||||
| { | ||||
| 	m_str += ::ConvertAnsi2Wide(str); | ||||
| 	m_str += static_cast<wchar_t*>(_bstr_t(str)); | ||||
| 	return (*this); | ||||
| } | ||||
| 
 | ||||
|  | @ -231,12 +170,6 @@ e2d::String & e2d::String::operator+=(const String &str) | |||
| 	return (*this); | ||||
| } | ||||
| 
 | ||||
| e2d::String & e2d::String::operator+=(const std::wstring &str) | ||||
| { | ||||
| 	m_str += str; | ||||
| 	return (*this); | ||||
| } | ||||
| 
 | ||||
| bool e2d::String::operator>(const String &str) const | ||||
| { | ||||
| 	return m_str > str.m_str; | ||||
|  | @ -292,11 +225,6 @@ e2d::String::operator wchar_t*() const | |||
| 	return const_cast<wchar_t*>(m_str.c_str()); | ||||
| } | ||||
| 
 | ||||
| e2d::String::operator const char*() const | ||||
| { | ||||
| 	return ::ConvertWide2Ansi(m_str.c_str()).c_str(); | ||||
| } | ||||
| 
 | ||||
| bool e2d::String::isEmpty() const | ||||
| { | ||||
| 	return m_str.empty(); | ||||
|  | @ -319,6 +247,17 @@ unsigned int e2d::String::getHashCode() const | |||
| 	return hash; | ||||
| } | ||||
| 
 | ||||
| std::wstring e2d::String::getWString() const | ||||
| { | ||||
| 	return m_str; | ||||
| } | ||||
| 
 | ||||
| std::string e2d::String::getCString() const | ||||
| { | ||||
| 	std::string str = static_cast<const char *>(_bstr_t(m_str.c_str())); | ||||
| 	return std::move(str); | ||||
| } | ||||
| 
 | ||||
| e2d::String e2d::String::toUpper() const | ||||
| { | ||||
| 	String str(*this); | ||||
|  | @ -427,13 +366,13 @@ e2d::String & e2d::String::append(wchar_t * str) | |||
| 
 | ||||
| e2d::String & e2d::String::append(const char * str) | ||||
| { | ||||
| 	m_str += ::ConvertAnsi2Wide(str); | ||||
| 	m_str += static_cast<wchar_t*>(_bstr_t(str)); | ||||
| 	return *this; | ||||
| } | ||||
| 
 | ||||
| e2d::String & e2d::String::append(char * str) | ||||
| { | ||||
| 	m_str += ::ConvertAnsi2Wide(str); | ||||
| 	m_str += static_cast<wchar_t*>(_bstr_t(str)); | ||||
| 	return *this; | ||||
| } | ||||
| 
 | ||||
|  | @ -443,28 +382,29 @@ e2d::String & e2d::String::append(const e2d::String & str) | |||
| 	return (*this); | ||||
| } | ||||
| 
 | ||||
| std::wostream & e2d::operator<<(std::wostream &cout, String &str) | ||||
| std::wostream & e2d::operator<<(std::wostream &cout, const String &str) | ||||
| { | ||||
| 	cout << str.m_str; | ||||
| 	return cout; | ||||
| } | ||||
| 
 | ||||
| std::wistream & e2d::operator>>(std::wistream &cin, e2d::String &str) | ||||
| std::wistream & e2d::operator>>(std::wistream &cin, String &str) | ||||
| { | ||||
| 	cin >> str.m_str; | ||||
| 	return cin; | ||||
| } | ||||
| 
 | ||||
| std::ostream & e2d::operator<<(std::ostream &cout, String &str) | ||||
| std::ostream & e2d::operator<<(std::ostream &cout, const String &str) | ||||
| { | ||||
| 	cout << ::ConvertWide2Ansi(str.m_str.c_str()); | ||||
| 	std::string cstr = static_cast<char*>(_bstr_t(str.m_str.c_str())); | ||||
| 	cout << cstr; | ||||
| 	return cout; | ||||
| } | ||||
| 
 | ||||
| std::istream & e2d::operator>>(std::istream &cin, e2d::String &str) | ||||
| std::istream & e2d::operator>>(std::istream &cin, String &str) | ||||
| { | ||||
| 	std::string temp; | ||||
| 	cin >> temp; | ||||
| 	str.m_str = ::ConvertAnsi2Wide(temp.c_str()); | ||||
| 	str.m_str = static_cast<wchar_t*>(_bstr_t(temp.c_str())); | ||||
| 	return cin; | ||||
| } | ||||
|  | @ -49,7 +49,7 @@ e2d::String e2d::Data::getString(const String & key, const String & defaultValue | |||
| 	return temp; | ||||
| } | ||||
| 
 | ||||
| void e2d::Data::setDefaultFileName(const String & fileName) | ||||
| void e2d::Data::setDataFilePath(const String & fileName) | ||||
| { | ||||
| 	if (!fileName.isEmpty()) | ||||
| 	{ | ||||
|  |  | |||
|  | @ -39,7 +39,7 @@ e2d::String e2d::Path::getTempPath() | |||
| 
 | ||||
| 	// 创建临时文件目录
 | ||||
| 	e2d::String tempFilePath; | ||||
| 	tempFilePath << path << L"Easy2DGameTemp"; | ||||
| 	tempFilePath << path << L"Easy2DGameTemp\\"; | ||||
| 	// 创建文件夹
 | ||||
| 	if (!Path::createFolder(tempFilePath)) | ||||
| 	{ | ||||
|  | @ -51,13 +51,12 @@ e2d::String e2d::Path::getTempPath() | |||
| 	if (!sAppName.isEmpty()) | ||||
| 	{ | ||||
| 		// 创建文件夹
 | ||||
| 		if (!Path::createFolder(tempFilePath + L"\\" + sAppName)) | ||||
| 		if (!Path::createFolder(tempFilePath + sAppName + L"\\")) | ||||
| 		{ | ||||
| 			return std::move(tempFilePath); | ||||
| 		} | ||||
| 		tempFilePath << L"\\" << sAppName; | ||||
| 		tempFilePath << sAppName << L"\\"; | ||||
| 	} | ||||
| 	tempFilePath << L"\\"; | ||||
| 	return std::move(tempFilePath); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										141
									
								
								core/ecommon.h
								
								
								
								
							
							
						
						
									
										141
									
								
								core/ecommon.h
								
								
								
								
							|  | @ -89,9 +89,9 @@ class String | |||
| { | ||||
| public: | ||||
| 	String(); | ||||
| 	String(const wchar_t *); | ||||
| 	String(const String &); | ||||
| 	String(const std::wstring &); | ||||
| 	String(const char *); | ||||
| 	String(const wchar_t *); | ||||
| 	String(String &&); | ||||
| 
 | ||||
| 	~String(); | ||||
|  | @ -105,6 +105,27 @@ public: | |||
| 	// »ñÈ¡¸Ã×Ö·û´®µÄÉ¢ÁÐÖµ
 | ||||
| 	unsigned int getHashCode() const; | ||||
| 
 | ||||
| 	// »ñÈ¡ Unicode ×Ö·û´®
 | ||||
| 	std::wstring getWString() const; | ||||
| 
 | ||||
| 	// »ñÈ¡ ANSI ×Ö·û´®
 | ||||
| 	std::string getCString() const; | ||||
| 
 | ||||
| 	// ºó½Ó×Ö·û´®
 | ||||
| 	String& append( | ||||
| 		const String &str | ||||
| 	); | ||||
| 
 | ||||
| 	// ºó½Ó×Ö·û´®
 | ||||
| 	String& append( | ||||
| 		const char * cstr | ||||
| 	); | ||||
| 
 | ||||
| 	// ºó½Ó×Ö·û´®
 | ||||
| 	String& append( | ||||
| 		char * cstr | ||||
| 	); | ||||
| 
 | ||||
| 	// ºó½Ó×Ö·û´®
 | ||||
| 	String& append( | ||||
| 		const wchar_t *str | ||||
|  | @ -115,20 +136,9 @@ public: | |||
| 		wchar_t *str | ||||
| 	); | ||||
| 
 | ||||
| 	// 后接字符串
 | ||||
| 	String& append( | ||||
| 		const String &str | ||||
| 	); | ||||
| 
 | ||||
| 	// ºó½Ó×Ö·û´®
 | ||||
| 	template<typename T> | ||||
| 	String& append(const T &value) | ||||
| 	{ | ||||
| 		std::wostringstream ss; | ||||
| 		ss << value; | ||||
| 		m_str += ss.str(); | ||||
| 		return (*this); | ||||
| 	} | ||||
| 	String& append(const T &value); | ||||
| 
 | ||||
| 	// »ñÈ¡²Ã¼ô×Ö·û´®
 | ||||
| 	String subtract( | ||||
|  | @ -166,76 +176,58 @@ public: | |||
| 
 | ||||
| 	// ½«ÈÎÒâÀàÐÍת»¯Îª×Ö·û´®
 | ||||
| 	template<typename T> | ||||
| 	static String toString(const T value) | ||||
| 	{ | ||||
| 		std::wostringstream ss; | ||||
| 		ss << value; | ||||
| 		return ss.str(); | ||||
| 	} | ||||
| 	static String toString(const T value); | ||||
| 
 | ||||
| 	static String toString(const wchar_t * str) { return std::move(String(str)); } | ||||
| 	static String toString(const char * str) { return std::move(String(str)); } | ||||
| 
 | ||||
| 	String& operator= (const wchar_t *); | ||||
| 	// ¸³ÖµÔËËã·û
 | ||||
| 	String& operator= (const String &); | ||||
| 	String& operator= (const std::wstring &); | ||||
| 	String& operator= (const char *); | ||||
| 	String& operator= (const wchar_t *); | ||||
| 
 | ||||
| 	bool operator== (const wchar_t *); | ||||
| 	bool operator== (const String &); | ||||
| 	bool operator== (const std::wstring &); | ||||
| 
 | ||||
| 	bool operator!= (const wchar_t *); | ||||
| 	bool operator!= (const String &); | ||||
| 	bool operator!= (const std::wstring &); | ||||
| 
 | ||||
| 	wchar_t &operator[] (int); | ||||
| 
 | ||||
| 	String operator+ (const wchar_t *); | ||||
| 	String operator+ (const String &); | ||||
| 	String operator+ (const std::wstring &); | ||||
| 
 | ||||
| 	friend String operator+ (const wchar_t*, const String &); | ||||
| 	friend String operator+ (const std::wstring &, const String &); | ||||
| 
 | ||||
| 	String& operator+= (const wchar_t *); | ||||
| 	// ÔËËã·û
 | ||||
| 	String& operator+= (const String &); | ||||
| 	String& operator+= (const std::wstring &); | ||||
| 	String& operator+= (const char *); | ||||
| 	String& operator+= (const wchar_t *); | ||||
| 	String operator+ (const String &); | ||||
| 	String operator+ (const char *); | ||||
| 	String operator+ (const wchar_t *); | ||||
| 
 | ||||
| 	// ÓÑÔªÔËËã·û
 | ||||
| 	friend String operator+ (const char *, const String &); | ||||
| 	friend String operator+ (const wchar_t*, const String &); | ||||
| 
 | ||||
| 	// ÀàÐÍת»»²Ù×÷·û
 | ||||
| 	operator const wchar_t* () const; | ||||
| 	operator wchar_t* () const; | ||||
| 
 | ||||
| 	// ±È½ÏÔËËã·û
 | ||||
| 	bool operator== (const String &); | ||||
| 	bool operator== (const char *); | ||||
| 	bool operator== (const wchar_t *); | ||||
| 	bool operator!= (const String &); | ||||
| 	bool operator!= (const char *); | ||||
| 	bool operator!= (const wchar_t *); | ||||
| 	bool operator> (const String &) const; | ||||
| 	bool operator>= (const String &) const; | ||||
| 	bool operator< (const String &) const; | ||||
| 	bool operator<= (const String &) const; | ||||
| 
 | ||||
| 	// << ÔËËã·û
 | ||||
| 	String& operator<< (const String &); | ||||
| 	String& operator<< (const char *); | ||||
| 	String& operator<< (char *); | ||||
| 	String& operator<< (const wchar_t *); | ||||
| 	String& operator<< (wchar_t *); | ||||
| 	template<typename T> | ||||
| 	String& operator<< (const T value) { return this->append<>(value); } | ||||
| 
 | ||||
| 	operator const wchar_t* () const; | ||||
| 	operator wchar_t* () const; | ||||
| 	// ÆäËûÔËËã·û
 | ||||
| 	wchar_t &operator[] (int); | ||||
| 
 | ||||
| 	friend std::wostream& operator<< (std::wostream &, String &); | ||||
| 	friend std::wistream& operator>> (std::wistream &, String &); | ||||
| 	friend std::ostream& operator<< (std::ostream &, const String &); | ||||
| 	friend std::wostream& operator<< (std::wostream &, const String &); | ||||
| 
 | ||||
| 	// 为 ANSI 作出的适应
 | ||||
| 	String(const char *); | ||||
| 	String(const std::string &); | ||||
| 	operator const char* () const; | ||||
| 	String& operator= (const char *); | ||||
| 	String& operator= (const std::string &); | ||||
| 	bool operator== (const char *); | ||||
| 	bool operator!= (const char *); | ||||
| 	String operator+ (const char *); | ||||
| 	friend String operator+ (const char *, const String &); | ||||
| 	String& operator+= (const char *); | ||||
| 	String& operator<< (const char *); | ||||
| 	String& operator<< (char *); | ||||
| 	String& append(const char *); | ||||
| 	String& append(char *); | ||||
| 
 | ||||
| 	friend std::ostream& operator<< (std::ostream &, String &); | ||||
| 	friend std::istream& operator>> (std::istream &, String &); | ||||
| 	friend std::wistream& operator>> (std::wistream &, String &); | ||||
| 
 | ||||
| private: | ||||
| 	std::wstring m_str; | ||||
|  | @ -741,4 +733,23 @@ protected: | |||
| 	VoidFunction m_callback; | ||||
| }; | ||||
| 
 | ||||
| // String ÀàÄ£°åº¯Êý¶¨Òå
 | ||||
| template<typename T> | ||||
| inline e2d::String & e2d::String::append(const T & value) | ||||
| { | ||||
| 	std::wostringstream ss; | ||||
| 	ss << value; | ||||
| 	m_str += ss.str(); | ||||
| 	return (*this); | ||||
| } | ||||
| 
 | ||||
| template<typename T> | ||||
| inline e2d::String e2d::String::toString(const T value) | ||||
| { | ||||
| 	std::wostringstream ss; | ||||
| 	ss << value; | ||||
| 	String str = ss.str().c_str(); | ||||
| 	return std::move(str); | ||||
| } | ||||
| 
 | ||||
| } | ||||
|  | @ -191,7 +191,7 @@ public: | |||
| 	); | ||||
| 
 | ||||
| 	// 修改数据文件的默认名称
 | ||||
| 	static void setDefaultFileName( | ||||
| 	static void setDataFilePath( | ||||
| 		const String & fileName | ||||
| 	); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue