pw域名网站,wordpress评论密码保护,软件开发工程师简历范文,网站设计 验收标准背景: 例如android jni 方法的签名, 这个需要每个用户都要知道具体类型,转化成签名, 要想写好签名, 必须很熟悉 类型对应的签名, 尤其java类对象要加个L, 本文将介绍怎么在编译期过程把类型转化成字符, 多个类型在尽性拼接. 定义基础数据结构
templatechar ... ch
str…背景: 例如android jni 方法的签名, 这个需要每个用户都要知道具体类型,转化成签名, 要想写好签名, 必须很熟悉 类型对应的签名, 尤其java类对象要加个L, 本文将介绍怎么在编译期过程把类型转化成字符, 多个类型在尽性拼接. 定义基础数据结构
templatechar ... ch
struct charArray
{static const char *to_array(){static const char arr[sizeof ...(ch) 1] {ch...};return arr;}
};
这个里边详细介绍可变参数模版. 定义类型转化成charArray
emplatetypename T
struct TypeToChar{};template
struct TypeToCharint{using TYPE charArrayI;static const char *to_array(){return TYPE::to_array();}
};template
struct TypeToCharlong{using TYPE charArrayJ;static const char *to_array(){return TYPE::to_array();}
};
template
struct TypeToCharchar{using TYPE charArrayC;static const char *to_array(){return TYPE::to_array();}
};
template
struct TypeToCharstd::string{using TYPE charArrayL,j, a,v,a,/,l, a, n, g, /,S,t,r,i,n,g,;;static const char *to_array(){return TYPE::to_array();}
};这里定义了类型, 以及对应的类型转化的签名, 接下来看下多个类型进行拼接带啊吗 拼接
templatetypename ...T
struct concat2{};templatechar ...ch1, char ...ch2
struct concat2charArraych1..., charArraych2...
{using TYPEcharArraych1..., ch2...;static const char* to_array(){return charArraych1..., ch2...::to_array();}
};templatetypename ...T
struct concat{};templatetypename T, typename U
struct concatT,U{using TYPEtypename concat2T,U::TYPE;static const char *to_array(){return TYPE::to_array();}
};把两个类型参数包, 拼接成1个 多类型拼接
templatetypename ...Args
struct TypesToCharArray {};templatetypename T
struct TypesToCharArrayT {using TYPE typename TypeToCharT::TYPE;static const char *to_array(){return TYPE::to_array();}
};templatetypename T, typename U
struct TypesToCharArrayT, U{using TYPE typename concattypename TypeToCharT::TYPE,typename TypeToCharU::TYPE::TYPE;static const char *to_array(){return TYPE::to_array();}
};templatetypename T, typename U, typename ...Args
struct TypesToCharArrayT, U, Args...{using TYPE typename concattypename TypesToCharArrayT,U::TYPE, typename TypesToCharArrayArgs...::TYPE::TYPE;static const char *to_array(){return TYPE::to_array();}
}; 测试demo
int main()
{std::coutcharArraya,b,c::to_array()std::endl;std::coutcharArraye,f,g::to_array()std::endl;std::coutconcat2charArraya,b,c, charArraye, f, g::to_array()std::endl;std::coutTypeToCharint::to_array()std::endl;std::coutTypesToCharArrayint::to_array()std::endl;std::coutTypesToCharArrayint, std::string::to_array()std::endl;std::coutTypesToCharArrayint, std::string,long,int::to_array()std::endl;return 0;
} 输出结果
abc
efg
abcefg
I
I
ILjava/lang/String;
ILjava/lang/String;JI