c++ - 如何对多种类型进行一种显式特化?

标签 c++ templates explicit-specialization

考虑像下面这样的模板函数,如何为多种类型显式特化一个函数版本:

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/

相关文章:

c++ - MS C++ 中的内联汇编是否需要类似 volatile 的东西来防止优化器干预

c++ - add_library 没有使用 c 源代码创建 .lib

c++ - 限制仿函数参数类型和常量

c++ - constexpr 和模板编译时间?

c++ - 函数模板中的数组类型推导

c++ - 函数模板 c++ 的显式特化

c++ - 库内外特化的模板类

c++ - 使用 boost singleton_pool 的自定义分配比默认慢

javascript - 有没有办法将变量传递给 Meteor 中的模板?

c++ - C++ 编译器如何扩展模板 <> 代码以及它如何影响相同的速度?