考虑像下面这样的模板函数,如何为多种类型显式特化一个函数版本:
template <typename T>
void doSomething(){
//whatever
}
目的是有一个特化而不是多个后续特化,因为//有些东西是一样的:
void doSomething<int>(){
//something
}
void doSomething<float>(){
//something
}
void doSomething<double>(){
//something
}
有什么方法可以实现专一化?
最佳答案
您不能对模板函数进行特化。但是你可以在一个可以从你的函数中使用的辅助类中委托(delegate)实现。一些框架代码:
实现一个模板类并特化它:
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 库中找到此类类型信息。
关于c++ - 如何对多种类型进行一种显式特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4280070/