最近工作项目中,需要做一个字符串编码转换的工具库。
在我之前的开发人员,提供了大量C风格的功能函数。每次转码之前,针对不同的编码,需要调用不同的功能函数。这种方式的问题很明显,就是每次都需要人工去判断字符串编码格式,并选择不同的功能函数。因此,还经常出现人为失误的情况。
为了有效的改善这种情况,我决定采用C++模板技术,能够自动匹配字符串类型,并正确调用编码转换的功能函数。
为此,我对C++模板SFINAE技术进行研究。
主要参考了:
https://zhuanlan.zhihu.com/p/21314708
例子1
template <class T, class junk = void>
class CTest1
{
public:
static int v1;
};
template <class T, class junk>
int CTest1<T, junk>::v1 = 11;
static void _test_template_class_case1()
{
CTest1<int>::v1 = 0;
CTest1<int, void>::v1 = 0;
CTest1<int, int>::v1 = 0;
}
CTest1模板类只有一个原型。这个原型有两个参数T、junk,其中junk参数可以缺省。
由于CTest1模板类只有一个匹配原型,所以无论junk参数填入什么,都会匹配到唯一的原型。
例子2
template <class T, class junk = void>