他小的有

C++任意类型转string

    在开发的过程中,最常用到的类应该就是字符串操作类了吧,自然免不了要进行转换,比如经常用到的 int转string,float转string,double转string等等。为了方便以后使用,这里使用函数模板及流的方式做成模板函数,方便了以后的复用。


    1.函数实现

/******************************************************************* 
 * 作者: 他小的有
 * 时间: 2016年6月23日19:51:52
 * 描述: 将任意类型转换成字符串
 * 版本: 1.3
 * 邮箱: 953546459@qq.com
 * 博客: http://www.suchone.com
 * 声明:Copyright (c) 2016 by Txdy, All Rights Reserved.
 *
 * 版本说明:
 *	1.简化了上一版本中多个函数的问题,现在版本直接将第二个参数设为默认,减少函数数量
 *	2.简化了宏命名(T2S)
 ******************************************************************/  

#ifndef _TXDY_CONVERT_HPP_
#define _TXDY_CONVERT_HPP_
#include <string>
#include <iostream>
#include <sstream>

namespace Txdy
{
	namespace Convert
	{
		//窄字节,宽字节
#ifdef UNICODE
	#define T2S ToStringW
#else
	#define T2S ToStringA
#endif

		/*
		* 功能:任意类型转字符串,可指定精度(常用于浮点型)
		* 参数:@T,任意类型(模板)
		*		@nNewFmtFlag,新格式化类型
		* 返回值:字符串(窄字节)
		*/
		template<class T>
		std::string ToStringA(const T& t, int nNewFmtFlag = std::ios::fixed)
		{
			std::ostringstream oss;  //创建一个流
			oss.setf(nNewFmtFlag);  //新的精度
			oss<<t;  //把值传递如流中
			return oss.str();  //返回转换后的字符
		}

		/*
		* 功能:任意类型转字符串,可指定精度(常用于浮点型)
		* 参数:@T,任意类型(模板)
		*		@nNewFmtFlag,新格式化类型
		* 返回值:字符串(宽字节)
		*/
		template<class T>
		std::wstring ToStringW(const T& t, int nNewFmtFlag = std::ios::fixed)
		{
			std::wostringstream oss;  //创建一个流
			oss.setf(nNewFmtFlag);  //新的精度
			oss<<t;  //把值传递如流中
			return oss.str();  //返回转换后的字符
		}
	}
}

#endif


    2.使用方法(我当前是在UNICODE环境下使用的)

// Convert_Example.cpp : Defines the entry point for the console application.
//
//描述:任意类型转字符串的例子,通过模板和流实现

#include "stdafx.h"
#include "./Core/Convert.hpp"

//使用转化命名空间
using namespace Txdy::Convert;

int _tmain(int argc, _TCHAR* argv[])
{
	//i -> string
	int i = 1234567890;
	std::wstring str = T2S(i);

	//float -> string
	float f = 123.456f;
	str = T2S(f);

	//double -> string
	double d = 1234.56789;
	str = T2S(d);

	//指定保留的小数位,保留两位小数
	str = T2S(d, 2);

	return 0;
}

    像这样之后,以后无论到哪里使用,拷贝一个头文件件进去就可以了,像什么之前格式类导致程序闪退的这种现象也不会存在了,一劳永逸

    顺便说了一下,为了防止与其它人的函数产生冲突,使用命名空间Txdy::Convert,如果项目不大,产生命名冲突的可能性较小,在实际使用的过程中可以 using namespace Txdy::Convert减少代码量。

    更新说明:

        1.1 新增Convert命名空间。

        1.2 新增宽字节的支持,可以时转宽字节或窄字节。

        1.3 取消了没有格式化类型的函数,直接将有格式化参数的函数的第二个格式化参数设为默认值。


    源码SVN地址:http://code.taobao.org/svn/Txdy_CPP/

    位于该目录下的 Examples/Convert_Examle 文件夹中。

本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!

1
分享到:

评论 0

取消
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址