考虑如下所示的模板函数,如何才能显式地将函数的一个版本专门化为多种类型:
template <typename T>
void doSomething(){
//whatever
}
目的是拥有一种专业化,而不是以下多个专业化,因为 // 某些东西是相同的:
void doSomething<int>(){
//something
}
void doSomething<float>(){
//something
}
void doSomething<double>(){
//something
}
有什么方法可以实现某一专业化?
您无法使模板函数专业化。但是您可以将实现委托给一个辅助类,该类可以在您的函数中使用。一些骨架代码:
实现一个模板类并对其进行专门化:
template< typename T, bool isArithmetic>
struct Something { void operator()() { ... } };
template< typename T, true>
struct Something { void operator()() { ... do something specialized for arithmetic types; } }
然后在模板函数中使用它:
template< typename T>
void myFunction()
{
Something<T, IsArithmetic<T>::value>()();
}
其中 IsArithmetic 是一个提供有关类型 T(选择器)信息的类。例如,您可以在 boost 库中找到此类类型信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)