在C++中类可以partially specialize,但是函数不行。
template <class T, class U>
T* Create(const U& arg)
{
return new T(arg);
}
下面这样partially specialize一个模版函数是不可以的。
template <class U>
Widget* Create<Widget, U>(const U& arg)
{
return new Widget(arg, -1);
}
解决这个问题可以用一个trick,在MCD中有云
template <typename T>
struct Type2Type
{
typedef T OriginalType;
};
定义这个类
现在可以了:
// An implementation of Create relying on overloading
// and Type2Type
template <class T, class U>
T* Create(Type2Type<T>, const U& arg){
return new T(arg);
}
template <class U>
Widget* Create(Type2Type<Widget>, const U& arg)
{
return new Widget(arg, -1);
}
// Use Create()
string* pStr = Create(Type2Type<string>(), "Hello");
Widget* pW = Create(Type2Type<Widget>(), 100);
Trick is over...
本文介绍了C++中模板函数无法直接进行部分特化的限制,并提供了一种通过使用Type2Type结构体来实现模板函数部分特化的解决方案。该方法利用重载机制绕过了语言本身的限制。
914

被折叠的 条评论
为什么被折叠?



