下面是本人使用C++封装的一个针对任意基础类型以及用户自定义类型指针的通用类型。目的是为方便常用类型使用统一化及便利化。该类型的使用就与平时使用基础类型基本没什么差别。具体可参看以下代码及测试代码。

 /******************************************************************************

                              I'm jacc.kim

     CreateDate: 2017-05-21 14:20:56
FileName : JKMsgDefine.h
Version : 1.00
Author : jacc.kim
Summary : 消息数据定义 ******************************************************************************/
#pragma once enum class eJKMsgDataValueType
{
eUndefined = , // 未定义类型
eChar = , // = char
eShort = , // = short
eInt = , // = int
eLong = , // = long
eInt64 = , // = long long eUChar = , // = unsigned char
eUShort = , // = unsigned short
eUInt = , // = unsigned int
eULong = , // = unsigned long
eUInt64 = , // = unsigned long long eFloat = , // = float
eDouble = , // = double eString = , // = string eCustom = , // = 用户自定义类型 };//enum class eJKMsgDataValueType
 /******************************************************************************

                              I'm jacc.kim

     CreateDate: 2017-05-22 09:30:36
FileName : JKMsgData.h
Version : 1.00
Author : jacc.kim
Summary : 消息数据类型定义 ******************************************************************************/
#pragma once #include <string>
#include <map> #include "JKMsgDefine.h" /******************************************************************************
* create : (jacc.kim) [05-21-2017]
* summary : class JKMsgDataValue.消息数据值类型
******************************************************************************/
class JKMsgDataValue
{
public:
JKMsgDataValue(const char v);
JKMsgDataValue(const short v);
JKMsgDataValue(const int v);
JKMsgDataValue(const long v);
JKMsgDataValue(const long long v); JKMsgDataValue(const unsigned char v);
JKMsgDataValue(const unsigned short v);
JKMsgDataValue(const unsigned int v);
JKMsgDataValue(const unsigned long v);
JKMsgDataValue(const unsigned long long v); JKMsgDataValue(const float v);
JKMsgDataValue(const double v); //JKMsgDataValue(const char* v);
JKMsgDataValue(const std::string& v); template<typename Tx>
JKMsgDataValue(Tx* pCustomPtr); template<typename Tx>
JKMsgDataValue(const Tx* pCustomPtr); template<>
JKMsgDataValue(char* pCustomPtr); template<>
JKMsgDataValue(const char* pCustomPtr); JKMsgDataValue(const JKMsgDataValue& v);
JKMsgDataValue& operator=(const JKMsgDataValue& v); ~JKMsgDataValue(); public:
char valueChar() const;
short valueShort() const;
int valueInt() const;
long valueLong() const;
long long valueLongLong() const; unsigned char valueUChar() const;
unsigned short valueUShort() const;
unsigned int valueUInt() const;
unsigned long valueULong() const;
unsigned long long valueULongLong() const; float valueFloat() const;
double valueDouble() const;
const std::string& valueString() const; template<typename Tx>
bool valueCustom(Tx*& pCustomPtr) const;
template<typename Tx>
Tx* valueCustom() const; template<typename Tx>
bool valueCustomConst(const Tx*& pCustomPtr) const;
template<typename Tx>
const Tx* valueCustomConst() const; //
// !!!note : 该版本不建议使用.功能上是可以强转为char*,但实际上,出于语言语义上的考虑,强行将一个const char*脱掉const特性
// ,在逻辑上是不合理的.因此,该版本的实现内部将直接返回空指针!!!
template<>
bool valueCustom(char*& pCustomPtr) const;
template<>
char* valueCustom() const; template<>
bool valueCustomConst(const char*& pCustomPtr) const;
template<>
const char* valueCustomConst() const; public:
operator char() const;
operator short() const;
operator int() const;
operator long() const;
operator long long() const; operator unsigned char() const;
operator unsigned short() const;
operator unsigned int() const;
operator unsigned long() const;
operator unsigned long long() const; operator float() const;
operator double() const;
operator const std::string&() const; template<typename Tx>
operator Tx*() const;
template<typename Tx>
operator const Tx*() const; //template<>
//operator char*() const;
//template<>
//operator const char*() const; public:
// 转换为字符串
bool toString(std::string& strOut) const;
bool toString(std::string& strOut, const unsigned int nDigits) const;
std::string toString() const;
std::string toString(const unsigned int nDigits) const; private:
void resetData(); private:
int m_eType;
union
{
char charData;
short shortData;
int intData;
long longData;
long long longlongData; unsigned char ucharData;
unsigned short ushortData;
unsigned int uintData;
unsigned long ulongData;
unsigned long long ulonglongData; float floatData;
double doubleData; std::string* stringData; // will be delete in destructor void* customData; // only reference.
const void* const_customData; // only reference.
} m_Data; };//class JKMsgDataValue
 #include <sstream>

 #include "src/GameCore/MsgDispatcher/JKMsgData.h"
#include "src/Common/GlobalDefine.h" ///////////////////////////////////////////////////////////////////////////////
// class JKMsgDataValue
JKMsgDataValue::JKMsgDataValue(const char v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eChar);
m_Data.charData = v;
} JKMsgDataValue::JKMsgDataValue(const short v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eShort);
m_Data.shortData = v;
} JKMsgDataValue::JKMsgDataValue(const int v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eInt);
m_Data.intData = v;
} JKMsgDataValue::JKMsgDataValue(const long v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eLong);
m_Data.longData = v;
} JKMsgDataValue::JKMsgDataValue(const long long v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eInt64);
m_Data.longlongData = v;
} JKMsgDataValue::JKMsgDataValue(const unsigned char v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eUChar);
m_Data.ucharData = v;
} JKMsgDataValue::JKMsgDataValue(const unsigned short v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eUShort);
m_Data.ushortData = v;
} JKMsgDataValue::JKMsgDataValue(const unsigned int v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eUInt);
m_Data.uintData = v;
} JKMsgDataValue::JKMsgDataValue(const unsigned long v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eULong);
m_Data.ulongData = v;
} JKMsgDataValue::JKMsgDataValue(const unsigned long long v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eUInt64);
m_Data.ulonglongData = v;
} JKMsgDataValue::JKMsgDataValue(const float v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eFloat);
m_Data.floatData = v;
} JKMsgDataValue::JKMsgDataValue(const double v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eDouble);
m_Data.doubleData = v;
} //JKMsgDataValue::JKMsgDataValue(const char* v) {
// this->resetData();
// if (nullptr == v) {
// m_eType = static_cast<int>(eJKMsgDataValueType::eUndefined);
// return;
// }
// m_eType = static_cast<int>(eJKMsgDataValueType::eString);
// m_Data.stringData = new std::string(v);
//} JKMsgDataValue::JKMsgDataValue(const std::string& v) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eString);
m_Data.stringData = new std::string(v);
} JKMsgDataValue::JKMsgDataValue(const JKMsgDataValue& v) {
*this = v;
} JKMsgDataValue& JKMsgDataValue::operator=(const JKMsgDataValue& v) {
if (&v != this) {
m_eType = v.m_eType;
m_Data = v.m_Data;
if (static_cast<eJKMsgDataValueType>(m_eType) == eJKMsgDataValueType::eString) {
m_Data.stringData = new std::string(*v.m_Data.stringData);
}
}
return *this;
} JKMsgDataValue::~JKMsgDataValue() {
this->resetData();
} void JKMsgDataValue::resetData() {
if (static_cast<int>(eJKMsgDataValueType::eString) == m_eType) {
delete m_Data.stringData;
m_Data.stringData = nullptr;
}
} char JKMsgDataValue::valueChar() const {
return m_Data.charData;
} short JKMsgDataValue::valueShort() const {
return m_Data.shortData;
} int JKMsgDataValue::valueInt() const {
return m_Data.intData;
} long JKMsgDataValue::valueLong() const {
return m_Data.longData;
} long long JKMsgDataValue::valueLongLong() const {
return m_Data.longlongData;
} unsigned char JKMsgDataValue::valueUChar() const {
return m_Data.ucharData;
} unsigned short JKMsgDataValue::valueUShort() const {
return m_Data.ushortData;
} unsigned int JKMsgDataValue::valueUInt() const {
return m_Data.uintData;
} unsigned long JKMsgDataValue::valueULong() const {
return m_Data.ulongData;
} unsigned long long JKMsgDataValue::valueULongLong() const {
return m_Data.ulonglongData;
} float JKMsgDataValue::valueFloat() const {
return m_Data.floatData;
} double JKMsgDataValue::valueDouble() const {
return m_Data.doubleData;
} const std::string& JKMsgDataValue::valueString() const {
return *m_Data.stringData;
} JKMsgDataValue::operator char() const {
return this->valueChar();
} JKMsgDataValue::operator short() const {
return this->valueShort();
} JKMsgDataValue::operator int() const {
return this->valueInt();
} JKMsgDataValue::operator long()const {
return this->valueLongLong();
} JKMsgDataValue::operator long long() const {
return this->valueLongLong();
} JKMsgDataValue::operator unsigned char() const {
return this->valueUChar();
} JKMsgDataValue::operator unsigned short() const {
return this->valueUShort();
} JKMsgDataValue::operator unsigned int() const {
return this->valueUInt();
} JKMsgDataValue::operator unsigned long()const {
return this->valueULong();
} JKMsgDataValue::operator unsigned long long() const {
return this->valueULongLong();
} JKMsgDataValue::operator float() const {
return this->valueFloat();
} JKMsgDataValue::operator double() const {
return this->valueDouble();
} JKMsgDataValue::operator const std::string&() const {
return valueString();
} bool JKMsgDataValue::toString(std::string& strOut) const {
return this->toString(strOut, );
} bool JKMsgDataValue::toString(std::string& strOut, const unsigned int nDigits) const {
auto bIsSuccess = true; auto doubleToString = [](const double v, const int nDigits, std::stringstream& strOutOS) {
const auto nFormatSize = ;
char szFormatBuff[nFormatSize];
memset((void*)szFormatBuff, 0x0L, nFormatSize);
sprintf(szFormatBuff, "%%.%df", nDigits); const auto nSizeDouble = sizeof(double);
char szBuff[nSizeDouble];
memset((void*)szBuff, 0x0L, nSizeDouble);
sprintf(szBuff, szFormatBuff, v); strOutOS << szBuff;
}; std::stringstream os;
switch (static_cast<eJKMsgDataValueType>(m_eType)) {
case eJKMsgDataValueType::eChar : os << m_Data.charData; break; // = char
case eJKMsgDataValueType::eShort : os << m_Data.shortData; break; // = short
case eJKMsgDataValueType::eInt : os << m_Data.intData; break; // = int
case eJKMsgDataValueType::eLong : os << m_Data.longData; break; // = long
case eJKMsgDataValueType::eInt64 : os << m_Data.longlongData; break; // = long long case eJKMsgDataValueType::eUChar : os << m_Data.ucharData; break; // = unsigned char
case eJKMsgDataValueType::eUShort : os << m_Data.ushortData; break; // = unsigned short
case eJKMsgDataValueType::eUInt : os << m_Data.uintData; break; // = unsigned int
case eJKMsgDataValueType::eULong : os << m_Data.ulongData; break; // = unsigned long
case eJKMsgDataValueType::eUInt64 : os << m_Data.ulonglongData; break; // = unsigned long long case eJKMsgDataValueType::eFloat : doubleToString(m_Data.floatData, nDigits, os); break; // = float
case eJKMsgDataValueType::eDouble : doubleToString(m_Data.doubleData, nDigits, os); break; // = double case eJKMsgDataValueType::eString : os << m_Data.stringData->c_str(); break; // = string default : DDZAssert(false, "Convert error!"); bIsSuccess = false; break;
} if (bIsSuccess) {
os >> strOut;
} return bIsSuccess;
} std::string JKMsgDataValue::toString() const {
std::string strOut;
if (!this->toString(strOut)) {
strOut = "";
}
return strOut;
} std::string JKMsgDataValue::toString(const unsigned int nDigits) const {
std::string strOut;
if (!this->toString(strOut, nDigits)) {
strOut = "";
}
return strOut;
}
 #include "JKMsgDefine.h"

 ///////////////////////////////////////////////////////////////////////////////
// class JKMsgDataValue
template<typename Tx>
JKMsgDataValue::JKMsgDataValue(Tx* pCustomPtr) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eUndefined);
if (nullptr != pCustomPtr) {
m_eType = static_cast<int>(eJKMsgDataValueType::eCustom);
m_Data.customData = static_cast<void*>(pCustomPtr);
}
} template<typename Tx>
JKMsgDataValue::JKMsgDataValue(const Tx* pCustomPtr) {
this->resetData();
m_eType = static_cast<int>(eJKMsgDataValueType::eUndefined);
if (nullptr != pCustomPtr) {
m_eType = static_cast<int>(eJKMsgDataValueType::eCustom);
m_Data.const_customData = static_cast<const void*>(pCustomPtr);
}
} template<>
JKMsgDataValue::JKMsgDataValue(char* pCustomPtr) {
this->resetData();
if (nullptr == pCustomPtr) {
m_eType = static_cast<int>(eJKMsgDataValueType::eUndefined);
return;
}
m_eType = static_cast<int>(eJKMsgDataValueType::eString);
m_Data.stringData = new std::string(pCustomPtr);
} template<>
JKMsgDataValue::JKMsgDataValue(const char* pCustomPtr) {
this->resetData();
if (nullptr == pCustomPtr) {
m_eType = static_cast<int>(eJKMsgDataValueType::eUndefined);
return;
}
m_eType = static_cast<int>(eJKMsgDataValueType::eString);
m_Data.stringData = new std::string(pCustomPtr);
} template<typename Tx>
bool JKMsgDataValue::valueCustom(Tx*& pCustomPtr) const {
auto bIsSuccess = false;
pCustomPtr = nullptr;
if (static_cast<eJKMsgDataValueType>(m_eType) == eJKMsgDataValueType::eCustom) {
pCustomPtr = static_cast<Tx*>(m_Data.customData);
bIsSuccess = true;
}
return bIsSuccess;
} template<typename Tx>
typename Tx* JKMsgDataValue::valueCustom() const {
Tx* pCustomPtr = nullptr;
if (!this->valueCustom(pCustomPtr)) {
pCustomPtr = nullptr;
}
return pCustomPtr;
} template<typename Tx>
bool JKMsgDataValue::valueCustomConst(const Tx*& pCustomPtr) const {
auto bIsSuccess = false;
pCustomPtr = nullptr;
if (static_cast<eJKMsgDataValueType>(m_eType) == eJKMsgDataValueType::eCustom) {
pCustomPtr = static_cast<const Tx*>(m_Data.const_customData);
bIsSuccess = true;
}
return bIsSuccess;
}
template<typename Tx>
typename const Tx* JKMsgDataValue::valueCustomConst() const {
const Tx* pCustomPtr = nullptr;
if (!this->valueCustomConst(pCustomPtr)) {
pCustomPtr = nullptr;
}
return pCustomPtr;
} template<>
bool JKMsgDataValue::valueCustom(char*& pCustomPtr) const {
auto bIsSuccess = false;
pCustomPtr = nullptr;
//if (static_cast<eJKMsgDataValueType>(m_eType) == eJKMsgDataValueType::eString) {
// const char* pConstCharPtr = m_Data.stringData->c_str();
// pCustomPtr = const_cast<char*>(pConstCharPtr);
// bIsSuccess = true;
//}
return bIsSuccess;
} template<>
char* JKMsgDataValue::valueCustom() const {
char* pCustomPtr = nullptr;
//if (!this->valueCustom(pCustomPtr)) {
// pCustomPtr = nullptr;
//}
return pCustomPtr;
} template<>
bool JKMsgDataValue::valueCustomConst(const char*& pCustomPtr) const {
auto bIsSuccess = false;
pCustomPtr = nullptr;
if (static_cast<eJKMsgDataValueType>(m_eType) == eJKMsgDataValueType::eString) {
pCustomPtr = m_Data.stringData->c_str();
bIsSuccess = true;
}
return bIsSuccess;
} template<>
const char* JKMsgDataValue::valueCustomConst() const {
const char* pCustomPtr = nullptr;
if (!this->valueCustomConst(pCustomPtr)) {
pCustomPtr = nullptr;
}
return pCustomPtr;
} template<typename Tx>
JKMsgDataValue::operator Tx*() const {
return this->valueCustom<Tx>();
} template<typename Tx>
JKMsgDataValue::operator const Tx*() const {
return this->valueCustomConst<Tx>();
} //template<>
//JKMsgDataValue::operator char*() const {
// auto pConstCharPtr = static_cast<const char*>(*this);
// return const_cast<char*>(pConstCharPtr);
//}
//
//template<>
//JKMsgDataValue::operator const char*() const {
// return this->valueCustomConst<char>();
//}

以下是测试代码。目前在 VS2013 中测试 Ok。

     std::list<JKMsgDataValue> listTest;

     JKMsgDataValue vChar                    = 'c';                                  // test ok.
listTest.emplace_back(vChar); // test ok.
JKMsgDataValue vShort = static_cast<short>(); // test ok.
listTest.emplace_back(vShort); // test ok.
JKMsgDataValue vInt = static_cast<int>(); // test ok.
listTest.emplace_back(vInt); // test ok.
JKMsgDataValue vLong = static_cast<long>(); // test ok.
listTest.emplace_back(vLong); // test ok.
JKMsgDataValue vLongLong = static_cast<long long>(); // test ok.
listTest.emplace_back(vLongLong); // test ok. JKMsgDataValue vUChar = static_cast<unsigned char>('b'); // test ok.
listTest.emplace_back(vUChar); // test ok.
JKMsgDataValue vUShort = static_cast<unsigned short>(); // test ok.
listTest.emplace_back(vUShort); // test ok.
JKMsgDataValue vUInt = static_cast<unsigned int>(); // test ok.
listTest.emplace_back(vUInt); // test ok.
JKMsgDataValue vULong = static_cast<unsigned long>(); // test ok.
listTest.emplace_back(vULong); // test ok.
JKMsgDataValue vULongLong = static_cast<unsigned long long>(); // test ok.
listTest.emplace_back(vULongLong); JKMsgDataValue fFloat = 10.1f; // test ok.
listTest.emplace_back(fFloat); // test ok.
JKMsgDataValue vDouble = 11.2; // test ok.
listTest.emplace_back(vDouble); // test ok. const double ddddddd1 = vDouble; // test ok.
const double ddddddd2 = (double)vDouble; // test ok.
const double ddddddd3 = double(vDouble); // test ok.
const double ddddddd4 = (double)(vDouble); // test ok. JKMsgDataValue vString_1 = "this is a string char*"; // test ok.
listTest.emplace_back(vString_1); // test ok.
JKMsgDataValue vString_2 = std::string("abc"); // test ok.
listTest.emplace_back(vString_2); // test ok. const std::string strTTTTTTTT1 = vString_2; // test ok.
const auto strTTTTTTTT2 = std::string(vString_2); // test ok.
const auto strTTTTTTTT3 = (std::string)vString_2; // test ok.
const auto strTTTTTTTT4 = (std::string)(vString_2); // test ok. JKMsgDataValue vv = 'm'; // test ok.
listTest.emplace_back(vv); // test ok.
vv = ; // test ok.
listTest.emplace_back(vv); // test ok.
vv = "jacc.kim"; // test ok.
listTest.emplace_back(vv); // test ok.
vv = 666.66; // test ok.
listTest.emplace_back(vv); // test ok. std::for_each(listTest.begin(),
listTest.end(),
[](const JKMsgDataValue& v){
std::string strOut;
const bool bIsSuccess = v.toString(strOut, ); // test ok.
CCLOG("-------- %s --------", strOut.c_str()); // test ok.
if (!bIsSuccess) {
int asdfasdf = ;
}
}); JKMsgDataValue vv2_0 = this; // test ok.
JKMsgDataValue vv2(this); // test ok.
HelloWorld* pThisObj = nullptr; // test ok.
if (vv2.valueCustom(pThisObj)) { // test ok.
int asfdasf = ; // test ok.
} // test ok. HelloWorld* pMyPtr = vv2; // test ok. const HelloWorld* pTestHelloWorld = this; // test ok.
JKMsgDataValue vv4 = pTestHelloWorld; // test ok.
auto pVV4 = static_cast<const HelloWorld*>(vv4); // test ok. char* pCharTest = "ak47"; // test ok.
JKMsgDataValue vv5 = pCharTest; // test ok.
auto pVV5 = static_cast<char*>(vv5); // test ok.
auto pVV5_2 = static_cast<const char*>(vv5); // test ok. char* pVV5_3 = nullptr;
vv5.valueCustom(pVV5_3); // test ok. const char* pVV5_4 = nullptr;
vv5.valueCustomConst(pVV5_4); // test ok. const char* pCharTestConst = "ak47";
JKMsgDataValue vv6 = pCharTestConst; // test ok.
auto pVV6 = static_cast<const char*>(vv6); // test ok.

以上如果有什么问题,欢迎大家指正、交流、共同探讨!

C++ Any 任意基础类型封装的更多相关文章

  1. salesforce 零基础学习(五十八)通过sObject的field返回其对应的基础类型

    项目中有时候会要求通过sObject的Field的type类型返回其对应的基本类型,然后对其进行相关的处理,创建sObject的field可以选择的type类型是固定多的. 上述类型可以转换成几种基本 ...

  2. TypeScript 素描-基础类型

    博文读自 TypeScript 官方文档而来,不具有学习性,仅是本人学习时记录以供日后翻阅 ,有学习TypeScript的朋友还请去看更为详细的官方文档 TypeScript官网文档中的基础类型, T ...

  3. Typescript基础类型

    1.布尔值__boolean 2.数字__number----除了支持十进制和十六进制字面量,Typescript还支持ECMAScript 2015中引入的二进制和八进制字面量. 3.字符串__st ...

  4. java基础-基础类型包装类型

    想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象. 为啥呢?因为在对象描述中就可以定义更多的属性和行为对该基本数据类型进行操作. [八种基本数据类型的包装类] byte --Byte ...

  5. Java基础类型自动装箱(autoboxing)

    Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 -->  包装器类 如下过程可触发自动装箱过程: Integer count = ...

  6. TypeScript学习笔记之基础类型

    从今天开始学习typescript了,记录ts学习点滴,最后,使用ts结合nodejs开发后端应用,一起共勉吧: typescript最新版本2.6,所有演示代码均基于此版本 开始之前确定安装了如下n ...

  7. TypeScript基础类型,类实例和函数类型声明

    TypeScript(TS)是微软研发的编程语言,是JavaScript的超集,也就是在JavaScript的基础上添加了一些特性.其中之一就是类型声明. 一.基础类型 TS的基础类型有 Boolea ...

  8. Typescript学习笔记(一)基础类型

    为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑).对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼. ...

  9. Java第三次作业——面向对象基础(封装)

    Java第三次作业--面向对象基础(封装) (一)学习总结 1.什么是面向对象的封装性,Java中是如何实现封装性的?试举例说明. 封装性 封装性是面向对象的方法所应遵循的一个重要原则,它有两个含义: ...

随机推荐

  1. perl多线程tcp端口扫描器(原创)

    perl多线程tcp端口扫描器(原创) http://bbs.chinaunix.net/thread-1457744-1-1.html perl socket 客户端发送消息 http://blog ...

  2. linux命令面试题

    文件管理命令 (1)Linux的文件系统目录配置要遵循FHS规范,规范定义的两级目录规范如下:        /home  每个账号在该目录下都有一个文件夹,进行数据的管理        /usr 有 ...

  3. win10出现"win10系统即将过期,请激活"的处理办法

    当打开电脑时,出现"你的win10系统即将过期,请前往激活”的提示.上网查了解决方案,避免以后在出现这样的情况,现将解决步骤整理如下: 1.下载KMSpico激活软件,百度网盘下载链接如下: ...

  4. SEO优化:WordPress站点地图(html和xml)插件Baidu Sitemap Generator

    前阵子分享了<如何实现纯代码制作网站地图的html和xml版本>,不过不是每个人都喜欢用纯代码来折腾博客的.今天,boke112就给大家分享一款国人柳城制作的包含html和xml两个版本的 ...

  5. MySQL中的内连接、外连接、交叉连接

    内连接(INNER JOIN):   分为三种 等值连接.自然连接.不等连接        外连接(OUTER JOIN):   左外连接(LEFT OUTER JOIN或LEFT JOIN)   右 ...

  6. AC日记——[Sdoi2010]粟粟的书架 bzoj 1926

    1926 思路: 主席树+二分水题: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 500005 #defi ...

  7. intellij添加jar包

    http://blog.csdn.net/a153375250/article/details/50851049

  8. python中执行shell命令的几个方法小结(转载)

    转载:http://www.jb51.net/article/55327.htm python中执行shell命令的几个方法小结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014- ...

  9. 51nod 1295 XOR key-区间异或最大值-可持久化01Trie树(模板)

    1295 XOR key 2 秒 262,144 KB 160 分 6 级题   给出一个长度为N的正整数数组A,再给出Q个查询,每个查询包括3个数,L, R, X (L <= R).求A[L] ...

  10. Hadoop中文编码乱码相关问题

    mapreduce程序处理GBK编码数据并输出GBK编码数据, hadoop涉及输出文本的默认输出编码统一用没有BOM的UTF-8的形式,但是对于中文的输出window系统默认的是GBK,有些格式文件 ...